我想知道CoreAnimation是否可以实现以下内容。
就像标题上说的,如果你愿意的话,我想要动画或者寻找,在整个时间轴动画中的一个位置。
例如,我创建了一个CABasicAnimation,它在10秒的整个时间线上将CALayer的颜色从蓝色变为红色,并使用EaseOut的简化功能。
与其从头到尾播放动画,我更喜欢更精细的控制。
例如,我想说animateTo(占整个动画的50%)。这将导致动画从0%开始,并以轻松的功能将整个动画的50%动画化。所以动画将持续5秒,我们将处于颜色转换的中间。
在此之后我可以说,animateTo(20%)。这将导致动画从我们目前的50%的位置开始,并反向动画到20%的全部动画。因此,我们最终会得到一个3秒的动画,我们将20%的颜色从蓝色转换成红色。
最后,我们只是在整个时间线上的一个位置动画。我可以轻松地说animateTo(5秒)而不是animateTo(50%)。或者animateTo(2秒)而不是animateTo(20%)。
我已经在CoreAnimation上读到了,看来我无法得到这样的控制。还有人用CoreAnimation试过这个吗?
谢谢!
发布于 2016-08-08 13:25:50
最新的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 动画属性,它们是:
frameboundscentertransformalphabackgroundColorcontentStretch如果您希望获得更多的灵活性和特性,请查看一些开放源码库,如TRX和预付款。
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()发布于 2015-03-31 17:56:02
正如已经指出的,没有内置的功能.但是如果您想要创建自己的解决方案,这里有一些已经存在的注释和有用的函数。
CABasicAnimation符合“`CAMediaTiming”协议,并包含一些用于用例的简洁功能:
timeOffset -这个值决定了你实际想要在什么时间进入动画,如果你的动画持续时间是2秒,而timeOffset设置为1,它将导致动画从中间开始。speed -将该值设置为-1将导致动画反转(例如,在50%到20%的情况下)duration -如果您想要更改动画的持续时间以进行更短的更改,例如从40%更改到50%,则可能会更改。timingFunction --我希望这里可以提供一个定制的计时函数,例如,即使持续时间设置为5秒,它也可以在1秒后完成动画,这意味着:在0到1之间的线性函数,在那个常数之后。然而,也有可能通过bezierPath实现这一近似。https://stackoverflow.com/questions/29372911
复制相似问题