你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發之動畫中的時間(概略)

iOS開發之動畫中的時間(概略)

編輯:IOS開發綜合

此篇文章將要引見IOS開發之動畫中的時間(概略)的相關引見,詳細實例請看下文

一、引言

在IOS開發中運用動畫時,可以經過設置動畫的durationspeedbegintimeoffset屬性,來設置動畫的時長、速度、起始時間及起始偏移。 用一個復雜的例子來闡明各個參數的的作用。動畫很復雜,一個白色的方塊從左移到左邊。動畫的繼續時間是1s,沒有反復,效果如下。 IOS開發之動畫中的時間(概況)

    
    CFTimeInterval currentTime = CACurrentMediaTime();
    CFTimeInterval currentTimeInLayer = [self.testLayer convertTime:currentTime fromLayer:nil];
    CFTimeInterval addTime = currentTimeInLayer;
    anim.beginTime = 0.3 + addTime;
    [anim setTimeOffset:0.5];
    [anim setSpeed:2];

做修正當前,效果如下:

iOS開發之動畫中的時間(概況) 與下面相比,三處不同

動畫的速度是原來的兩倍。 點擊開端動畫的按鈕,到開端動畫,有一個延遲。 動畫起始時,滑塊的地位為地方,而不是在右邊。

我們曾經看到了這些屬性的效果。翻閱文檔,發現begintimespeed等屬性是CAMediaTiming這協議的屬性,並且CALayerCAAnimation都恪守了CAMediaTiming協議。 那麼CAMediaTiming協議是什麼呢?有什麼作用呢?

二、層級時間構造

依據文檔,CMediaTiming協議構建了一個層級的時間零碎,並用這個層級的時間零碎來協調各個layer、animation的時間。 這個協議被CAAnimationCALayer恪守,每一個恪守協議的的object對應一個time space。依據object之間的關系,不同的time space有層級關系。比方Layer A有一個subLayer B,那麼Layer A對應的time space就是layer B對應的time spaceparent time space。每一個time space中時間的數值都是依據parent time space的數值,以及begintimespeed等屬性,依據一定的規則來計算的。 為了便於了解層級時間零碎,先看下layer在屏幕上的顯示地位是如何確定的,然後做一個類比。 iOS開發之動畫中的時間(概況)t = (tp - begin) * speed + offset 四、basic local time

這次轉換是為了處置以後層級的重放(repeat)、以及重放之前能否要倒放(play backward)等操作。 比方以後層級是一個動畫(CAAnimation恪守CAMediaTiming協議),duration是1s,經過第一次轉換之後的active local time是5.5s。假如動畫的repeatCount是10,那麼經過第二次轉化當前,basic local time會是0.5s,因而以後是動畫展現一半的形態。

repeatCountrepeatDuration 以後的層級要反復的次數或反復的時間,兩者不可同時指定。 以動畫為例,假如指定repeatCount,那麼指定了動畫要反復幾次。假如指定了repeatDuration,那麼指定了動畫反復的時間。 autoreverses 在反復之前能否要倒放。 五、文首的例子

依據這些知識,可以解釋文章開端時設置參數的效果。 當動畫被加到layer上時,動畫對應的time space被加到層級時間零碎中,是layer對應的time space的子層級。

動畫的速度是原來的兩倍 設置動畫的speed是2,這樣子動畫中的時間流逝速度時layer中時間流逝速度的2倍。當layer中時間經過0.5s時,動畫中時間曾經流逝了1s,動畫曾經完成了。(動畫的duration是1s) 點擊開端動畫的按鈕,到開端動畫,有一個延遲 我們首先失掉了以後layer的時間addtime,然後把動畫的begintime設置為addtime+0.3。這樣子當動畫被加到layer之後0.3s,layer中的時間是addtime+0.3,此時動畫中的時間才開端計算,之前動畫沒有開端。 動畫起始時,滑塊的地位為地方,而不是在右邊 我們設置了動畫的offset為0.5s。當動畫開端時,動畫對應的time space的時間是0.5s,對應動畫duration的一半,即滑塊地位在屏幕地方。 六、更多使用

理解了CAMediaTiming協議後,可以完成很多動畫的效果。

讓某一個layer上的動畫中止 設置layer的speed為0即可。 完成門翻開然後封閉的效果 完成一個門翻開的動畫,然後把動畫的autoreverses屬性設置為YES即可。 layer上的若干動畫順次延遲啟動 辨別設置這些動畫的beginTime為不同的值即可 手動控制動畫的進度 設置動畫的speed為0,然後改動動畫的offset即可。

蘋果曾經把工具給我們了,可以做出什麼樣的產品就看大家的想象力了。

參考

控制動畫時間 控制動畫時間(上文的中文版) Time Warp in Animation

以上就是這篇文章的全部內容了,希望大家可以喜歡。

【iOS開發之動畫中的時間(概略)】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved