国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

淺談IOS屏幕刷新ADisplayLink

瀏覽:6日期:2022-09-16 15:53:15
目錄什么是CADisplayLinkCADisplayLink與NSTimer有什么不同CADisplayLink使用的例子注意什么是CADisplayLink

我們在應用中創建一個新的CADisplayLink對象,把它添加到一個runloop中,并給它提供一個target和selector在屏幕刷新的時候調用。

一但CADisplayLink以特定的模式注冊到runloop之后,每當屏幕需要刷新的時候,runloop就會調用CADisplayLink綁定的target上的selector,這時target可以讀到CADisplayLink的每次調用的時間戳,用來準備下一幀顯示需要的數據。例如一個視頻應用使用時間戳來計算下一幀要顯示的視頻數據。在UI做動畫的過程中,需要通過時間戳來計算UI對象在動畫的下一幀要更新的大小等等。

在添加進runloop的時候我們應該選用高一些的優先級,來保證動畫的平滑。可以設想一下,我們在動畫的過程中,runloop被添加進來了一個高優先級的任務,那么,下一次的調用就會被暫停轉而先去執行高優先級的任務,然后在接著執行CADisplayLink的調用,從而造成動畫過程的卡頓,使動畫不流暢。

duration屬性提供了每幀之間的時間,也就是屏幕每次刷新之間的的時間。我們可以使用這個時間來計算出下一幀要顯示的UI的數值。但是duration只是個大概的時間,如果CPU忙于其它計算,就沒法保證以相同的頻率執行屏幕的繪制操作,這樣會跳過幾次調用回調方法的機會。

frameInterval屬性是可讀可寫的NSInteger型值,標識間隔多少幀調用一次selector方法,默認值是1,即每幀都調用一次。如果每幀都調用一次的話,對于iOS設備來說那刷新頻率就是60HZ也就是每秒60次,如果將frameInterval設為2 那么就會兩幀調用一次,也就是變成了每秒刷新30次。

我們通過pause屬性開控制CADisplayLink的運行。當我們想結束一個CADisplayLink的時候,應該調用-(void)invalidate從runloop中刪除并刪除之前綁定的target跟selector另外CADisplayLink不能被繼承。

CADisplayLink與NSTimer有什么不同

iOS設備的屏幕刷新頻率是固定的,CADisplayLink在正常情況下會在每次刷新結束都被調用,精確度相當高。NSTimer的精確度就顯得低了點,比如NSTimer的觸發時間到的時候,runloop如果在阻塞狀態,觸發時間就會推遲到下一個runloop周期。并且NSTimer新增了tolerance屬性,讓用戶可以設置可以容忍的觸發的時間的延遲范圍。CADisplayLink使用場合相對專一,適合做UI的不停重繪,比如自定義動畫引擎或者視頻播放的渲染。NSTimer的使用范圍要廣泛的多,各種需要單次或者循環定時處理的任務都可以使用。在UI相關的動畫或者顯示內容使用CADisplayLink比起用NSTimer的好處就是我們不需要在格外關心屏幕的刷新頻率了,因為它本身就是跟屏幕刷新同步的。

CADisplayLink使用的例子

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateTextColor)];self.displayLink.paused = YES;[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];-(void)updateTextColor{}- (void)startAnimation{ self.beginTime = CACurrentMediaTime(); self.displayLink.paused = NO;}- (void)stopAnimation{ self.displayLink.paused = YES; [self.displayLink invalidate]; self.displayLink = nil;}

我們知道動畫效果就是一個屬性的線性變化,比如UIView 動畫的EasyInEasyOut。通過數值按照不同速率的變化我們能生成更接近真實世界的動畫效果。我們也可以利用這個特性來使一些其他屬性按照我們期望的曲線變化。比如當播放視頻時關掉視頻的聲音我可以通過CADisplayLink來實現一個EasyOut的漸出效果:先快速的降低音量,在慢慢的漸變到靜音。

注意

通常來講:iOS設備的刷新頻率事60HZ也就是每秒60次。那么每一次刷新的時間就是1/60秒 大概16.7毫秒。當我們的frameInterval值為1的時候我們需要保證的是CADisplayLink調用的`target`的函數計算時間不應該大于 16.7否則就會出現嚴重的丟幀現象。

在mac應用中我們使用的不是CADisplayLink而是CVDisplayLink它是基于C接口的用起來配置有些麻煩但是用起來還是很簡單的。

以上就是淺談IOS屏幕刷新ADisplayLink的詳細內容,更多關于IOS屏幕刷新ADisplayLink的資料請關注好吧啦網其它相關文章!

標簽: IOS
相關文章:
主站蜘蛛池模板: 国产上床视频 | 免费手机黄色网址 | 欧美私人网站 | 男女视频免费看 | 9191在线亚洲精品 | 亚洲经典在线 | 久久久久欧美精品 | 亚洲精品国产第一区二区三区 | 超薄肉色丝袜精品足j福利 超级乱淫视频aⅴ播放视频 | 韩国一区在线 | www.99精品 | 婷婷的久久五月综合先锋影音 | 日本一区二区三区欧美在线观看 | 国产成人精品亚洲 | 三级中文字幕永久在线视频 | 免费一级毛片在线播放不收费 | 和日本免费不卡在线v | 免费国产成人高清无线看软件 | 99久久精品毛片免费播放 | 欧美三级做爰视频 | 亚洲国产一级毛片 | 国产一进一出视频网站 | 国产精品视频免费观看调教网 | 成人国内精品久久久久影院 | 免费视频久久看 | 欧美激情亚洲一区中文字幕 | 国产精品短视频免费观看 | 新婚第一次一级毛片 | 日韩一区二区三区在线 | 色天天躁夜夜躁天干天干 | 成年男女免费视频网站 | 欧美一线高本道高清在线 | 国内精品中文字幕 | 亲子乱子伦xxxx | 日本精品高清一区二区2021 | 久久两性 | 亚洲黄色美女视频 | 日韩成人在线观看视频 | 美女张开腿 | 久久久日本久久久久123 | 美女张开腿双腿让男人桶 |