我有一个Bezier曲线,我使用CAKeyFrameAnimation动画一个物体沿着它移动。但是,假设在检测到用户点击时,对象在曲线的某个点停止。然后在单击按钮以恢复移动时,对象应沿着剩余路径移动到最后。我该怎么做呢?
如果我将路径添加到CAKeyFrameAnimation对象,则在单击“恢复”按钮时,对象将从路径的起点向右移动。不是从它停止的角度来看。我希望它继续只从停止的点开始移动,而不是从头开始。有没有什么方法可以从路径停止的路径为它设置动画?
答案 0 :(得分:3)
所有核心动画时序都在CAMediaTiming
协议中实现。其属性之一是speed
,它定义了图层相对于其父图层时间空间的动画计时。将speed
属性设置为0.0
将有效地暂停动画。
你必须做一点时间内务管理,以确保重新启动后动画正常完成。文档中的Technical Q&A QA1673具有以下示例代码,该代码适用于您:
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeLayer:(CAlayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}