最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

CAMediaTiming ( 時(shí)間協(xié)議)詳解及實(shí)例代碼

 更新時(shí)間:2016年12月12日 15:05:19   投稿:lqh  
這篇文章主要介紹了CAMediaTiming / 時(shí)間協(xié)議詳解及實(shí)例代碼的相關(guān)資料,這里附有實(shí)例代碼,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下

CAMediaTiming ( 時(shí)間協(xié)議)詳解

有一種通過CAAnimation實(shí)現(xiàn)的協(xié)議叫做CAMediaTiming,也就是CABasicAnimation和CAKeyframeAnimation的基類(指CAAnimation)。像duration,beginTime和repeatCount這些時(shí)間相關(guān)的屬性都在這個(gè)類中。大體而言,協(xié)議中定義了8個(gè)屬性,這些屬性通過一些方式結(jié)合在一起,準(zhǔn)確的控制著時(shí)間。文檔中每個(gè)屬性只有幾句話,所以很有可能在看這篇文章之前你都已經(jīng)讀過了,但是我覺得使用可視化的圖形能更好的解釋時(shí)間。

可視化的CAMediaTiming

為了顯示相關(guān)屬性的不同時(shí)間,無論是他們自己還是混合狀態(tài),我都會(huì)動(dòng)態(tài)的將橙色變?yōu)樗{(lán)色。下面的塊狀顯示了從開始到結(jié)束的動(dòng)畫過程,時(shí)間線上每一個(gè)標(biāo)志代表一秒鐘。你可以看到時(shí)間線上的任意一點(diǎn),當(dāng)前顏色即表示動(dòng)畫中的當(dāng)前時(shí)間。比如,duration像下面一樣可視。

我們都知道,CALayer和CAAnimation都實(shí)現(xiàn)了CAMediaTiming 協(xié)議,因此在Core Animation中,理解CAMediaTiming協(xié)議中的屬性是非常必要的,但是蘋果的文檔中對(duì)于各個(gè)屬性描述太簡(jiǎn)單,對(duì)初學(xué)者容易理解,這篇文章主要幫助理解CAMediaTiming協(xié)議中各個(gè)屬性的含義。

CAMediaTiming Protocol提供了8個(gè)屬性,下面將分別講解。

CAMediaTiming / 時(shí)間協(xié)議

  1. repeatCount,動(dòng)畫的重復(fù)次數(shù),可以設(shè)置為小數(shù)。設(shè)置為HUGE_VALF,表示無限重復(fù)。
  2. repeatDuration,動(dòng)畫總時(shí)長(zhǎng),如果大于單次時(shí)長(zhǎng),則重復(fù);如果小于單次時(shí)長(zhǎng),則截?cái)唷?/li>
  3. duration,單次動(dòng)畫時(shí)長(zhǎng)。
  4. speed,圖層或動(dòng)畫模型相對(duì)于父圖層CALayer的時(shí)間流逝速度。
  5. fillMode,有效期結(jié)束后,動(dòng)畫對(duì)象的呈現(xiàn)效果是凍結(jié)還是移除。
  6. beginTime,相對(duì)于父對(duì)象的開始時(shí)間。注意,以系統(tǒng)的絕對(duì)時(shí)間為準(zhǔn)。例如:
/**
當(dāng)前時(shí)間2秒以后開始動(dòng)畫
*/
keyFrameAnim.beginTime = CACurrentMediaTime() + 2;
/**
截止到當(dāng)前時(shí)間,動(dòng)畫已經(jīng)執(zhí)行了2秒,
注意,如果執(zhí)行的時(shí)間大于動(dòng)畫時(shí)長(zhǎng),則表示動(dòng)畫已經(jīng)執(zhí)行過。
*/
keyFrameAnim.beginTime = CACurrentMediaTime() - 2;

7.timeOffset,時(shí)間軸偏移量。將時(shí)間軸移動(dòng)至偏移位置,再執(zhí)行整個(gè)動(dòng)畫時(shí)長(zhǎng)。假設(shè)動(dòng)畫時(shí)長(zhǎng)3秒,偏移量為8,則開始位置為8 % 3 = 2,再執(zhí)行3秒,即在整個(gè)時(shí)長(zhǎng)的1/ 3處結(jié)束。

8.CACurrentMediaTime,返回系統(tǒng)當(dāng)前的絕對(duì)時(shí)間(從本次開機(jī)開始),單位秒。

 /**
 The receiver does not appear until it begins and is removed from the presentation when it is completed.
 */
 kCAFillModeRemoved; // (默認(rèn))動(dòng)畫模型的呈現(xiàn)效果直至開始時(shí)才顯示,并在動(dòng)畫結(jié)束后移除。
 /**
 The receiver does not appear until it begins but remains visible in its final state when it is completed.
 */
 kCAFillModeForwards; // 動(dòng)畫模型的呈現(xiàn)效果直至開始時(shí)才顯示,但在動(dòng)畫結(jié)束后仍然顯示最后的狀態(tài)。
 /**
 The receiver appears in its initial state before it begins but is removed from the presentation when it is completed.
 */
 kCAFillModeBackwards; // 動(dòng)畫開始之前,動(dòng)畫模型顯示其初始呈現(xiàn)效果,但在動(dòng)畫結(jié)束后移除。
 /**
 The receiver appears in its initial state before it begins and remains visible in its final state when it is completed.
 */
 kCAFillModeBoth; // 動(dòng)畫開始之前,動(dòng)畫模型顯示其初始呈現(xiàn)效果,并且在動(dòng)畫結(jié)束后仍然顯示最后的狀態(tài)。

暫停/繼續(xù)動(dòng)畫demo

- (IBAction)pauseBtnClicked:(id)sender {
  /**
   判斷當(dāng)前圖層對(duì)象是否有針對(duì)postion屬性的動(dòng)畫效果
   */
  if ([self.layer.presentationLayer animationForKey:@"position"]) {
    // 通過絕對(duì)時(shí)間獲取圖層的本地時(shí)間
    CFTimeInterval localTime = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
    /**
     將圖層的時(shí)間流逝速度設(shè)置為0,以暫停動(dòng)畫
     */
    self.layer.speed = 0;
    // 設(shè)置圖層的時(shí)間軸偏移量,為繼續(xù)動(dòng)畫做準(zhǔn)備
    self.layer.timeOffset = localTime;

  }
}

- (IBAction)continueBtnClicked:(id)sender {
  /**
   判斷當(dāng)前圖層對(duì)象是否有針對(duì)postion屬性的動(dòng)畫效果
   */
  if ([self.layer.presentationLayer animationForKey:@"position"]) {
    // 獲取上次暫停時(shí)的時(shí)間軸偏移量
    CFTimeInterval timeOffset = self.layer.timeOffset;

    // 重置時(shí)間軸偏移量
    self.layer.timeOffset = 0;
    // 速度還原為1
    self.layer.speed = 1;

    // 重置開始時(shí)間
#warning 此處嚴(yán)重不理解。
    self.layer.beginTime = 0;

    // 計(jì)算暫停時(shí)間和當(dāng)前時(shí)間的差值
    CFTimeInterval localTime = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
    CFTimeInterval timeSincePause = localTime - timeOffset;

    // 從上一次暫停處開始
    self.layer.beginTime = timeSincePause;
  }
}

感謝閱讀,希望能幫助到大家,謝謝大對(duì)本站的支持!

相關(guān)文章

  • 詳解iOS本地推送與遠(yuǎn)程推送

    詳解iOS本地推送與遠(yuǎn)程推送

    這篇文章主要為大家詳細(xì)介紹了iOS本地推送與遠(yuǎn)程推送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS開發(fā)之UIPickerView實(shí)現(xiàn)城市選擇器的步驟詳解

    iOS開發(fā)之UIPickerView實(shí)現(xiàn)城市選擇器的步驟詳解

    這篇文章給大家介紹iOS利用控件UIPickerView實(shí)現(xiàn)城市選擇器的效果,選擇城市這一功能相信在大家日常開發(fā)的時(shí)候經(jīng)常遇見,下面就來看看詳細(xì)的實(shí)現(xiàn)過程,有需要的可以參考借鑒。
    2016-09-09
  • 詳解iOS多線程GCD問題

    詳解iOS多線程GCD問題

    本篇文章主要介紹了iOS多線程GCD問題,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • IOS開發(fā)之多線程N(yùn)SThiread GCD NSOperation Runloop

    IOS開發(fā)之多線程N(yùn)SThiread GCD NSOperation Runloop

    這篇文章主要介紹了IOS多線程開發(fā),主要用到NSThiread、GCD、 NSOperation、Runloop,有詳細(xì)的原理解析和實(shí)例代碼,對(duì)多線程感興趣的同學(xué),可以參考下
    2021-04-04
  • Flutter之TabBarView組件項(xiàng)目實(shí)戰(zhàn)示例

    Flutter之TabBarView組件項(xiàng)目實(shí)戰(zhàn)示例

    這篇文章主要為大家介紹了Flutter之TabBarView組件項(xiàng)目實(shí)戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • iOS13即將到來,iOS推送DeviceToken適配方案詳解

    iOS13即將到來,iOS推送DeviceToken適配方案詳解

    這篇文章主要介紹了iOS13即將到來,iOS推送DeviceToken適配方案詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • IOS程序開發(fā)之跳轉(zhuǎn)短信發(fā)送界面實(shí)現(xiàn)發(fā)送短信功能

    IOS程序開發(fā)之跳轉(zhuǎn)短信發(fā)送界面實(shí)現(xiàn)發(fā)送短信功能

    在程序開發(fā)中,我們經(jīng)常遇到這樣一功能:某個(gè)程序里面發(fā)送一些短信驗(yàn)證,那么基于代碼是如何實(shí)現(xiàn)的呢?下面小編通過本文給大家介紹IOS程序開發(fā)之跳轉(zhuǎn)短信發(fā)送界面實(shí)現(xiàn)發(fā)送短信功能,有需要的朋友拿去用
    2016-01-01
  • iOS實(shí)現(xiàn)簡(jiǎn)單的抽屜效果

    iOS實(shí)現(xiàn)簡(jiǎn)單的抽屜效果

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)簡(jiǎn)單的抽屜效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • IOS中無限滾動(dòng)Scrollview效果

    IOS中無限滾動(dòng)Scrollview效果

    這篇文章主要為大家詳細(xì)介紹了IOS中無限滾動(dòng)Scrollview效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • swift 單例的實(shí)現(xiàn)方法及實(shí)例

    swift 單例的實(shí)現(xiàn)方法及實(shí)例

    這篇文章主要介紹了swift 單例的實(shí)現(xiàn)方法及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

洛阳市| 丰原市| 安国市| 定襄县| 威海市| 密云县| 三都| 清水县| 沁阳市| 铁岭县| 平舆县| 黑龙江省| 蒙阴县| 冀州市| 临湘市| 长治市| 呼伦贝尔市| 辽源市| 于田县| 莫力| 澳门| 册亨县| 台中市| 库伦旗| 三都| 什邡市| 泌阳县| 光泽县| 海宁市| 卢氏县| 垦利县| 遂溪县| 冕宁县| 马鞍山市| 萍乡市| 潍坊市| 盘山县| 南通市| 高平市| 双峰县| 昆山市|