【问题标题】: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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多