? ? iOS中的動(dòng)畫是一個(gè)很大的模塊,不可能一下子介紹完,下面就來(lái)說(shuō)說(shuō)CADisplayLink,也就是逐鎮(zhèn)動(dòng)畫.
? ? 首先,什么是CADisplayLink?
? ? CADisplayLink是一個(gè)能讓我們以和屏幕刷新頻率相同的頻率將內(nèi)容繪到屏幕上的定時(shí)器.我們將CADisplayLink綁定到Runloop中,每當(dāng)屏幕需要刷新(一般屏幕刷新為60幀/s)時(shí)候,就會(huì)調(diào)用CADisplayLink綁定的selector,這樣我們就可以在selector中做一些事情來(lái)達(dá)到某些特定的效果.
她和NSTimer不同的地方有:
??? 1.原理不同
? ? 就像上面說(shuō)的那樣,CADisplayLink以和屏幕刷新頻率相同的頻率將內(nèi)容繪到屏幕上的定時(shí)器.我們將CADisplayLink綁定到Runloop中,每當(dāng)屏幕結(jié)束刷新的時(shí)候,runloop就會(huì)向target發(fā)送制定的selector消息.
? ? NSTimer以制定的模式注冊(cè)到runloop中后,每當(dāng)?shù)竭_(dá)設(shè)定的周期后,runloop就會(huì)向target發(fā)送制定的selector消息
??? 2.精確性不同
? ? CADisplayLink是以和屏幕相同的頻率將內(nèi)容繪到屏幕上,iOS設(shè)備的屏幕刷新頻率是固定的60/s,在正常情況下CADisplayLink每次都會(huì)被調(diào)用.NSTimer在Runloop特別忙的情況下,就會(huì)推遲到下一周期,不過(guò)可以通過(guò)NSTimer的tolerance屬性,設(shè)置可以容忍的觸發(fā)的時(shí)間范圍.
? ? 注:CADisplayLink的頻率不是固定的60/s(默認(rèn)是60/s),受frameInterval屬性的調(diào)控,如果frameInterval設(shè)置為2.則CADisplayLink的頻率為60/2.
? ? 形成逐幀可以用UIImageView的animationImages,不過(guò)一般不這么使用,因?yàn)檫@樣一旦設(shè)置完animationImages后,中間的過(guò)程就無(wú)法控制了.如圖1.1
? ? 而是使用CADisplayLink,圖1.2
??? 效果如下:
??? 點(diǎn)擊下載demo??