美文网首页
iOS 测试界面流畅度

iOS 测试界面流畅度

作者: 可能是含钙最高的钙钙 | 来源:发表于2016-09-08 10:33 被阅读928次

    从别人的demo里扒拉出来的一段代码,可以检测当前界面的帧流率,对于界面流畅度有很高要求的情况下可以用该段代码做检测

    使用的时候直接创建该Label,然后给一个frame即可,很方便.

    // .h文件
    #import <UIKit/UIKit.h>
    
    @interface GGFPSLabel : UILabel
    
    @end
    
    // .m文件
    #import "GGFPSLabel.h"
    
    #define kSize CGSizeMake(100, 20)
    
    /*** 帧率 */
    @implementation GGFPSLabel{
        CADisplayLink *_link;
        NSUInteger _count;
        NSTimeInterval _lastTime;
        UIFont *_font;
        UIFont *_subFont;
        
        NSTimeInterval _llll;
    }
    
    - (instancetype)initWithFrame:(CGRect)frame {
        if (frame.size.width == 0 && frame.size.height == 0) {
            frame.size = kSize;
            
        }
        self = [super initWithFrame:frame];
        
        self.layer.cornerRadius = 5;
        self.clipsToBounds = YES;
        self.textAlignment = NSTextAlignmentCenter;
        self.userInteractionEnabled = NO;
        self.backgroundColor = [UIColor colorWithWhite:0.000 alpha:0.700];
        
        _font = [UIFont fontWithName:@"Menlo" size:14];
        if (_font) {
            _subFont = [UIFont fontWithName:@"Menlo" size:4];
        } else {
            _font = [UIFont fontWithName:@"Courier" size:14];
            _subFont = [UIFont fontWithName:@"Courier" size:4];
        }
        
        _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick:)];
        [_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
        return self;
    }
    
    - (void)dealloc {
        [_link invalidate];
    }
    
    - (CGSize)sizeThatFits:(CGSize)size {
        return kSize;
    }
    
    - (void)tick:(CADisplayLink *)link {
        if (_lastTime == 0) {
            _lastTime = link.timestamp;
            return;
        }
        
        _count++;
        NSTimeInterval delta = link.timestamp - _lastTime;
        if (delta < 1) return;
        _lastTime = link.timestamp;
        float fps = _count / delta;
        _count = 0;
        
        CGFloat progress = fps / 60.0;
        UIColor *color = [UIColor colorWithHue:0.27 * (progress - 0.2) saturation:1 brightness:0.9 alpha:1];
        
        NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%.2f FPS", fps]];
        [text setAttributes:@{NSForegroundColorAttributeName : color} range:NSMakeRange(0, text.length - 3)];
        [text setAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} range:NSMakeRange(text.length - 3, 3)];
        self.attributedText = text;
    }
    
    

    相关文章

      网友评论

          本文标题:iOS 测试界面流畅度

          本文链接:https://www.haomeiwen.com/subject/svhcettx.html