iOS開發之動畫中的時間(概況),ios概況

來源:互聯網
上載者:User

iOS開發之動畫中的時間(概況),ios概況
一、引言

在iOS開發中使用動畫時,可以通過設定動畫的durationspeedbegintimeoffset屬性,來設定動畫的時間長度、速度、起始時間及起始位移。
用一個簡單的例子來說明各個參數的的作用。動畫很簡單,一個紅色的方塊從左移到右邊。動畫的期間是1s,沒有重複,效果如下。
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];

做修改以後,效果如下:

二、層級時間結構

根據文檔,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在螢幕上的顯示位置是如何確定的,然後做一個類比。

layer層級如上。要確定sublayer1在螢幕上的顯示位置,一共分三步。

與此類似,要確定sub1ayer1中的time,也要分三步。

和確定layer的位置相比,確定時間有一些複雜,主要提現在下面兩點

三、 active local time

這次轉換是為了處理當前層級的object在父層級的的時間軸上的位置,以及當前層級和父層級之間時間流逝速度的關係。
和這次轉換相關的屬性有beginTimespeed以及timeOffset

parent timeactive local time有一個公式,可以用來參考。

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,因此當前是動畫展示一半的狀態。

五、文首的例子

根據這些知識,可以解釋文章開始時設定參數的效果。
當動畫被加到layer上時,動畫對應的time space被加到層級時間系統中,是layer對應的time space的子層級。

六、更多應用

瞭解了CAMediaTiming協議後,可以實現很多動畫的效果。

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

參考

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.