我目前正在创建一个具有两种不同状态的小按钮。每个状态由两个CAShapeLayer
s表示,状态之间的过渡使用一系列CAKeyframeAnimation
s / CABasicAnimation
s进行动画处理,这些都会更改形状图层的路径属性。我的问题是如何动画到从当前动画开始的状态(即在动画时按下按钮)。
通常,我会向表示层询问当前属性值并使用加法动画(如完美描述here),但由于这是一个多步动画,我必须弄清楚哪一步我目前正在制作动画,然后链接相应的动画以反转到之前的状态。但这很棘手(我希望所有动画都是removeOnCompletion=false
并查询动画的时间偏移量,以确定哪个动画当前处于活动状态以及动画的距离。
不幸的是,将图层速度设置为0.0并且只是来回动画timeOffset
也不起作用,因为我的辅助动画在相反的方向上表现不同。
为形状图层使用自定义图层属性看起来很麻烦,但我可以更轻松地将进度属性与当前动画步骤匹配。
答案 0 :(得分:2)
所以在经过一些试验和错误之后,我想出了以下“解决方案”:我使用CADisplayLink
来获取每个帧的时间更新,并从动画开始时的时间戳中减去当前时间戳,可以计算出已经过的动画时间,从而计算进度(通过划分animationDuration)。这样我可以用偏移量开始反向动画。在内部,我从关键帧动画中计算下一帧,并调整新持续时间的keyTimes。
您可以看到此here