簡體   English   中英

CABasicAnimation動畫(搜索)到整個時間軸上的時間位置

[英]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

如果您尋求更多的靈活性和功能,請查看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()

如前所述,沒有內置功能。 但是,如果您想創建自己的解決方案,這里有一些注意事項和有用的功能。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM