iOS開發之動畫中的時間,ios開發動畫

來源:互聯網
上載者:User

iOS開發之動畫中的時間,ios開發動畫
概述

在動畫中,我們會指定動畫的期間。例如

scaleAnimation.duration = self.config.appearDuration

那麼這個時間是怎麼定義的呢?是指的絕對時間嗎?

層級時間結構

layer在螢幕上的顯示位置是根據父layer的位置以及本身相對於父layer位移定義的。
與此類似,每一個layer都有自己的time space,計算本地時間(local time)時候,需要根據父layer的時間以及一定的轉換規則來計算出本地時間。
這個規則就是CAMediaTiming協議。每一個CALayerCAAnimation實現了這個協議。

關於時間的概念 CAMediaTiming協議時間轉換公式例子

用一個簡單的例子來說明各個參數的影響。動畫很簡單,一個紅色的方塊從左移到右邊。動畫的期間是1s,沒有重複。
關於begintime

根據公式
\[
t= max\left\{(t_p-begintime),0\right\}*speed+offset
\]
這裡begintime是應該怎麼指定呢?如果想把一個加到layer的動畫的延遲5s執行,應該把begintime直接設為5嗎?
由於begintime是相對於父物件(layer)的時間位移。由於layer可能在很久以前就存在了,因此對於動畫來說\(t_p\)是一個很大的值。直接把begintime指定為5s,那麼\(t\)將會是一個很大的值。正確的做法是把begintime設定為5s+這個layer被加到父layer以後,度過的時間,稱為addtime.

    animation.beginTime = addTime + delay;

如何得到addtime

addTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
參考

控制動畫時間
控制動畫時間
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.