ios - 如何从 CAKeyframeAnimation 获取当前动画步骤

标签 ios swift core-animation cakeyframeanimation

我目前正在创建一个具有两种不同状态的小按钮。每个状态都由两个 CAShapeLayer 表示,状态之间的转换使用一系列 CAKeyframeAnimations/CABasicAnimation 进行动画处理,它们都会发生变化形状图层的路径属性。我的问题是如何动画到从当前动画开始的状态(即动画时按下按钮)。

通常,我会向表示层询问当前属性值并使用附加动画(正如完美描述的 here ),但由于这是一个多步骤动画,我必须弄清楚我当前在哪一步动画然后链接适当的动画以反转到以前的状态。但这相当棘手(我想让所有动画都为 removeOnCompletion=false 并查询动画的时间偏移以确定哪个动画当前处于事件状态以及距离多远)。

不幸的是,将层速度设置为 0.0 并且只是来回设置 timeOffset 的动画也不起作用,因为我有在相反方向上表现不同的辅助动画。

为形状图层使用自定义图层属性似乎很麻烦,但我可以更轻松地将进度属性与当前动画步骤相匹配。

最佳答案

因此,经过反复试验后,我提出了以下“解决方案”:我使用 CADisplayLink 获取每一帧的时间更新,并通过动画播放时的时间戳减去当前时间戳开始时,我可以计算出经过的动画时间,从而计算出进度(通过除以 animationDuration)。这样我就可以用偏移量开始反向动画。在内部,我根据关键帧动画计算下一帧,并针对新的持续时间调整 keyTimes。 你可以看到这个 here 的实现

关于ios - 如何从 CAKeyframeAnimation 获取当前动画步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578717/

相关文章:

swift - XCUI测试: Is it possible to tap on element not using static texts present but identifier?

swift - 元组比较在幕后是如何工作的

ios - 带弧形渐变的动画饼图

ios - objective-c 中这两个for循环之间的区别

iOS - DrawRect 性能问题

ios - UILabel 的问题没有像它应该的那样更新

swift - CGAffineTransformMakeRotation 和 CGAffineTransformRotate 的区别

ios - iOS 中的 CoreGraphics : how can I save the paths drawn in a CGContext and retrieve them in the next draw call?

javascript - 使用 jquery : does not work on Iphone, safary 等显示和隐藏微调器

ios - PayPal MPL 的内部服务器错误