// // YYFPSLabel.m // YYKitExample // // Created by ibireme on 15/9/3. // Copyright (c) 2015 ibireme. All rights reserved. // #import "YYFPSLabel.h" #define kSize CGSizeMake(55, 20) @implementation YYFPSLabel { 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 = YES; 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]; } __weak typeof(self) weakSelf = self; _link = [CADisplayLink displayLinkWithTarget:weakSelf selector:@selector(tick:)]; [_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; [self addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithActionBlock:^(UIPanGestureRecognizer *_Nonnull sender) { // 获取手势的移动,也是相对于最开始的位置 CGPoint transP = [sender translationInView:weakSelf]; weakSelf.transform = CGAffineTransformTranslate(weakSelf.transform, transP.x, transP.y); // 复位 [sender setTranslation:CGPointZero inView:weakSelf]; if (sender.state == UIGestureRecognizerStateEnded) { [UIView animateWithDuration:0.2 animations:^{ weakSelf.lmj_x = (weakSelf.lmj_x - kScreenWidth * 0.5) > 0 ? (kScreenWidth - weakSelf.lmj_width - 20) : 20; weakSelf.lmj_y = weakSelf.lmj_y > 80 ? weakSelf.lmj_y : 80; }]; } }]]; return self; } - (void)dealloc { [_link invalidate]; _link = nil; } - (void)tick:(CADisplayLink *)link { if (_lastTime == 0) { _lastTime = link.timestamp; return; } _count++; NSTimeInterval delta = link.timestamp - _lastTime; if (delta < 1) return; _lastTime = link.timestamp; CGFloat 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:@"%zd FPS",(int)round(fps)]]; [text yy_setColor:color range:NSMakeRange(0, text.length - 3)]; [text yy_setColor:[UIColor whiteColor] range:NSMakeRange(text.length - 3, 3)]; text.yy_font = _font; [text yy_setFont:_subFont range:NSMakeRange(text.length - 4, 1)]; self.attributedText = text; } @end