【问题标题】:BezierPath animationUIBezierPath 动画
【发布时间】:2011-01-04 05:05:36
【问题描述】:
我有一条贝塞尔曲线,我使用 CAKeyFrameAnimation 为对象设置动画以使其沿其移动。但是,假设对象在检测到用户轻击时停止在曲线中的某个点。然后在单击按钮以恢复移动时,对象应沿剩余路径移动到末端。我该怎么做呢?
如果我将路径添加到 CAKeyFrameAnimation 对象,然后单击恢复按钮,对象会从路径的起点向右移动到终点。不是从它停止的那一刻起。我希望它只从它停止的点继续移动,而不是从头开始。有什么方法可以从它停止的点沿路径对其进行动画处理?
【问题讨论】:
标签:
iphone
ipad
core-animation
bezier
【解决方案1】:
所有的核心动画时间都在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;
}