我目前正在创建一个具有两种不同状态的小按钮。每个状态都由两个 CAShapeLayer
表示,状态之间的转换使用一系列 CAKeyframeAnimation
s/CABasicAnimation
进行动画处理,它们都会发生变化形状图层的路径属性。我的问题是如何动画到从当前动画开始的状态(即动画时按下按钮)。
通常,我会向表示层询问当前属性值并使用附加动画(正如完美描述的 here ),但由于这是一个多步骤动画,我必须弄清楚我当前在哪一步动画然后链接适当的动画以反转到以前的状态。但这相当棘手(我想让所有动画都为 removeOnCompletion=false
并查询动画的时间偏移以确定哪个动画当前处于事件状态以及距离多远)。
不幸的是,将层速度设置为 0.0 并且只是来回设置 timeOffset
的动画也不起作用,因为我有在相反方向上表现不同的辅助动画。
为形状图层使用自定义图层属性似乎很麻烦,但我可以更轻松地将进度属性与当前动画步骤相匹配。
最佳答案
因此,经过反复试验后,我提出了以下“解决方案”:我使用 CADisplayLink
获取每一帧的时间更新,并通过动画播放时的时间戳减去当前时间戳开始时,我可以计算出经过的动画时间,从而计算出进度(通过除以 animationDuration)。这样我就可以用偏移量开始反向动画。在内部,我根据关键帧动画计算下一帧,并针对新的持续时间调整 keyTimes。
你可以看到这个 here 的实现
关于ios - 如何从 CAKeyframeAnimation 获取当前动画步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578717/