YYModel學(xué)習(xí)筆記之FPSLabel查看屏幕幀數(shù)

鎮(zhèn)樓圖.JPG

前言

前段時(shí)間在研究YYModel框架時(shí)學(xué)到不少東西,尤其是下面要講述的查看屏幕幀數(shù)的小工具.個(gè)人感覺在項(xiàng)目里比較實(shí)用,自己模仿寫了一個(gè),代碼中有詳細(xì)注釋,有需要的小伙伴們可以點(diǎn)擊這里查看, 如果star一下就更好了??, 請(qǐng)看我的效果圖??

fps.gif

AxeFPSLabel實(shí)現(xiàn)思路

  • 首先說下CADisplayLink, CADisplayLink是一種定時(shí)器, 系統(tǒng)的每一幀刷新時(shí)都會(huì)被調(diào)用. CADisplayLink中的timestamp是系統(tǒng)每次調(diào)用時(shí)的系統(tǒng)時(shí)間戳柱衔,通過計(jì)算兩次時(shí)間戳的間隔奋蔚,可以得到每一幀所花費(fèi)的時(shí)間特纤,既可以獲取當(dāng)前每秒能刷新多少幀您单。

下面給出YYFPSLabel源碼

  • YYFPSLabel.h
/**
 Show Screen FPS...
 
 The maximum fps in OSX/iOS Simulator is 60.00.
 The maximum fps on iPhone is 59.97.
 The maxmium fps on iPad is 60.0.
 */
@interface YYFPSLabel : UILabel

@end
  • YYFPSLabel.m
#import "YYFPSLabel.h"
#import "YYWeakProxy.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 = 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];
    }
    
    // 如果直接用 self 或者 weakSelf,都不能解決循環(huán)引用問題
    _link = [CADisplayLink displayLinkWithTarget:[YYWeakProxy proxyWithTarget:self] selector:@selector(tick:)];
//    __weak typeof(self) weakSelf = self;
//    _link = [CADisplayLink displayLinkWithTarget:weakSelf selector:@selector(tick:)];
    [_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    return self;
}

- (void)dealloc {
    [_link invalidate];
    NSLog(@"timer release");
}

- (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:@"%d FPS",(int)round(fps)]];
    [text addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, text.length - 3)];
    [text addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(text.length - 3, 3)];
    [text addAttribute:NSFontAttributeName value:_font range:NSMakeRange(0, text.length)];
    [text addAttribute:NSFontAttributeName value:_subFont range:NSMakeRange(text.length - 4, 1)];
    self.attributedText = text;
}

后續(xù)

  • 閑下來的時(shí)候會(huì)繼續(xù)完善補(bǔ)充文章,各位小伙伴有什么見解或是疑問可以留言給我,歡迎討論??!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子淑际,更是在濱河造成了極大的恐慌,老刑警劉巖扇住,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春缕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡台囱,警方通過查閱死者的電腦和手機(jī)淡溯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來簿训,“玉大人咱娶,你說我怎么就攤上這事∏科罚” “怎么了膘侮?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)的榛。 經(jīng)常有香客問我琼了,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任雕薪,我火速辦了婚禮昧诱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘所袁。我一直安慰自己盏档,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布燥爷。 她就那樣靜靜地躺著蜈亩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪前翎。 梳的紋絲不亂的頭發(fā)上稚配,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音港华,去河邊找鬼道川。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苹丸,可吹牛的內(nèi)容都是我干的愤惰。 我是一名探鬼主播苇经,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼赘理,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了扇单?” 一聲冷哼從身側(cè)響起商模,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜘澜,沒想到半個(gè)月后施流,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鄙信,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瞪醋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片装诡。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡银受,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸦采,到底是詐尸還是另有隱情宾巍,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布渔伯,位于F島的核電站顶霞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锣吼。R本人自食惡果不足惜选浑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一蓝厌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧古徒,春花似錦褂始、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舀寓,卻和暖如春胆数,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背互墓。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工必尼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人篡撵。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓判莉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親育谬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子券盅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評(píng)論 25 707
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,916評(píng)論 6 13
  • 作為一個(gè)展覽設(shè)計(jì)師不只是會(huì)畫個(gè)圖,熟練掌握設(shè)計(jì)軟件就OK了膛檀, 每個(gè)展位都是一個(gè)企業(yè)的濃縮锰镀,要了解客戶所屬行業(yè)形勢(shì),...
    四色堇閱讀 885評(píng)論 0 0
  • 心里憋著一股勁咖刃,想哭卻哭不出來泳炉,30歲仍像個(gè)小孩子,昨天剛離開家嚎杨,今天就想爸爸媽媽和姐姐了花鹅,太過于感性的人或者真的...
    上帝和你WJ閱讀 187評(píng)論 0 0
  • 我今天終于穿兩件衣服啦刨肃!哈哈哈!氣溫下降啦自脯!朋友們注意保暖哦之景!
    王利河閱讀 209評(píng)論 0 0