[英]CABasicAnimation animate (seek) to a position in time over an entire timeline
我想知道CoreAnimation是否可以進行以下操作。
就像標題所說的那樣,我想為整個時間軸動畫中的某個時間動畫或尋找是否願意。
例如,假設我創建了一個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嘗試過嗎?
謝謝!
最新的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 (在撰寫本文時仍處於beta版)。 動畫也僅限於UIView Animatable Properties ,它們是:
frame
bounds
center
transform
alpha
backgroundColor
contentStretch
如果您尋求更多的靈活性和功能,請查看TRX和Advance等一些開源庫:
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()
如前所述,沒有內置功能。 但是,如果您想創建自己的解決方案,這里有一些注意事項和有用的功能。
CABasicAnimation
符合“ CAMediaTiming”協議,並且針對您的用例包含一些簡潔的功能:
timeOffset
此值確定您真正想開始進入動畫的時間,如果您的動畫持續時間為2秒,並且timeOffset設置為1,則它將使動畫從中間開始。 speed
-將該值設置為-1將導致動畫反轉(例如,對於50%到20%的情況) duration
-如果您想更改動畫的持續時間以進行更短的更改(例如從40%到50%),則可以更改。 timingFunction
我希望可以在此處提供一個自定義計時功能,例如,即使持續時間設置為5秒,它也可以在1秒后完成動畫,這意味着:0到1之間的線性函數,之后不變。 但是,也有可能使用bezierPath實現近似。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.