亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

可視化的CAMediaTiming

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

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

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

CAMediaTiming / 時間協(xié)議

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

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

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

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

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

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

  }
}

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

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

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

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

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

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

相關(guān)文章

  • iOS WebSocket長鏈接的實現(xiàn)方法

    iOS WebSocket長鏈接的實現(xiàn)方法

    WebSocket是HTML5一種新的協(xié)議,它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信,本篇文章介紹了iOS WebSocket長鏈接的使用,有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • iOS 圖片旋轉(zhuǎn)方法實例代碼

    iOS 圖片旋轉(zhuǎn)方法實例代碼

    這篇文章主要介紹了iOS 圖片旋轉(zhuǎn)方法實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • iOS對數(shù)組進(jìn)行排序的實例代碼

    iOS對數(shù)組進(jìn)行排序的實例代碼

    本文通過實例代碼給大家講解了ios對數(shù)組進(jìn)行排序的實例方法,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-08-08
  • IOS 改變鍵盤顏色代碼

    IOS 改變鍵盤顏色代碼

    這篇文章主要介紹了IOS 改變鍵盤顏色代碼,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • 詳解iOS Method Swizzling使用陷阱

    詳解iOS Method Swizzling使用陷阱

    這篇文章主要介紹了詳解iOS Method Swizzling使用陷阱,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • iOS 增加右側(cè)按鈕功能實例代碼

    iOS 增加右側(cè)按鈕功能實例代碼

    這篇文章主要介紹了iOS 增加右側(cè)按鈕功能實例代碼,需要的朋友可以參考下
    2017-07-07
  • iOS制作帶彈跳動畫發(fā)布界面

    iOS制作帶彈跳動畫發(fā)布界面

    這篇文章主要為大家詳細(xì)介紹了iOS制作帶彈跳動畫發(fā)布界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • iOS16使用SwiftUI Charts創(chuàng)建折線圖實現(xiàn)實例

    iOS16使用SwiftUI Charts創(chuàng)建折線圖實現(xiàn)實例

    這篇文章主要為大家介紹了iOS16使用SwiftUI Charts創(chuàng)建折線圖實現(xiàn)實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • IOS 開發(fā)之ios視頻截屏的實現(xiàn)代碼

    IOS 開發(fā)之ios視頻截屏的實現(xiàn)代碼

    這篇文章主要介紹了IOS 開發(fā)之ios視頻截屏的實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 學(xué)習(xí)iOS開關(guān)按鈕UISwitch控件

    學(xué)習(xí)iOS開關(guān)按鈕UISwitch控件

    這篇文章主要為大家詳細(xì)介紹了iOS開關(guān)按鈕UISwitch控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論