2015-03-31 27 views
4

我想知道以下是否可能與CoreAnimation。CABasicAnimation動畫(尋找)在整個時間軸上的一個位置

就像標題所說,我想時間在整個時間軸動畫,動畫,或者如果你會尋求到一個位置。例如,假設我創建了一個CABasicAnimation,它使用EaseOut的緩動功能在10秒的整個時間線上將CALayer的顏色從藍色變爲紅色。

與其從頭到尾播放該動畫,我寧願更精細的控制。

例如,我想說整個動畫的animateTo(50%)。這將導致一個動畫從0%開始,並通過一個緩出功能動畫到整個動畫的50%。所以動畫會持續5秒鐘,我們將處於顏色轉換的中間。

之後我可以說,animateTo(20%)。這將導致動畫從我們當前的50%位置開始,並將動畫反轉爲總動畫的20%。所以我們最終得到3秒鐘的動畫,並且我們會將顏色從藍色變爲紅色的20%。

最終我們只是動畫的時間位置在整個時間表。我可以輕鬆地說animateTo(5秒),而不是animateTo(50%)。或animateTo(2秒)而不是animateTo(20%)。

我一直在CoreAnimation讀了,看來我未能夠獲得這種控制。有沒有其他人用CoreAnimation試過這個?

謝謝!

+0

我敢肯定,有沒有「內置」的方式做這使用核心動畫。你可以創建一個可以做你想做的事情的方法,但是在這個方法中,每次從當前值開始並轉到新值時,你都會調用一個新的動畫方法。這要求你可以計算從藍色到紅色的50%方式(或者你在其間進行動畫的任何值)。 – rdelmar 2015-03-31 16:06:08

+0

嘿rdelmar感謝您的快速響應!我以前很怕那個。我會做線性翻譯,因此計算這些新值不會太困難。 – Levi 2015-03-31 16:21:11

回答

0

正如已經指出的那樣,沒有內置的功能。但是,如果你想創建自己的解決方案,這裏有一些筆記和有用的功能已經存在。

CABasicAnimation符合`CAMediaTiming'協議,幷包含了您的使用情況下,一些整潔的功能:

  • timeOffset - 該值決定在什麼時候成你真正想創業,如果你有一個動畫動畫的持續時間爲2秒,timeOffset設置爲1,則會導致動畫從中間開始。
  • speed - 該值設置爲-1會導致動畫反轉(如從50%到20%的情況下)
  • duration - 可能會改變,如果你想改變動畫的持續時間更短改變,例如形成40%至50%。
  • timingFunction - 我希望有可能在這裏提供自定義的定時功能,即使持續時間被設定爲5秒,這例如剛剛完成後1秒的動畫,這意味着:一個線性函數在0和1之間之後只是不變。然而,也可以用bezierPath來實現近似。
1

最新的SDK增添了幾分對UIKit的動畫。 它可能適合您的需求...

根據文檔:

新的基於對象的,完全互動和可中斷動畫支持,可以讓你保持你的動畫的控制和基於手勢的交互鏈接它們

新閃亮UIViewPropertyAnimator

let animator = UIViewPropertyAnimator(duration: 3.0, curve: .easeInOut) { 
    self.myView.alpha = 0 
} 
animator.startAnimation() 

animator.pauseAnimation() 
animator.isReversed = true 
animator.fractionComplete = 1.5/CGFloat(animator.duration) 

但也有一些限制: PropertyAnimator需要定位iOS 10(在撰寫本文時,它仍處於測試階段)。 另外動畫限於UIView的可動畫屬性,它們是:

  • frame
  • bounds
  • center
  • transform
  • alpha
  • backgroundColor
  • contentStretch

如果你尋求更多的靈活性和功能來看看一些開源庫,例如TRXAdvance

import TRX 

let tween = Tween(from: 0, to: 1, time:3, ease:Ease.Quad.easeOut) { 
    anyObject.anyProperty = $0 
} 
let reversed = tween.reversed() 
reversed.seek(1.5) 
reversed.start() 
相關問題