我想知道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?
谢谢!
答案 0 :(得分: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
如果您寻求更多灵活性和功能,请查看一些开源库,例如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()
答案 1 :(得分:0)
正如已经指出的那样,没有内置功能。但是如果你想创建自己的解决方案,这里有一些已经存在的注释和有用的功能。
CABasicAnimation
符合`CAMediaTiming'协议,并为您的用例包含一些简洁的功能:
timeOffset
- 此值确定您实际想要开始动画的时间,如果您的动画持续时间为2秒且timeOffset设置为1,则会导致动画在中间。speed
- 将该值设置为-1会导致动画反转(例如,对于50%到20%的情况)duration
- 如果您想要更改动画的持续时间以进行较短的更改,则可能会更改,例如形成40%至50%。timingFunction
- 我希望可以在这里提供自定义计时功能,例如,即使持续时间设置为5秒,也只需在1秒后完成动画,这意味着:线性功能0到1之间,之后只是常数。但是,也可以使用bezierPath实现近似值。