2010-12-30 11 views
1

私はベジェ曲線を持っていて、CAKeyFrameAnimationを使ってそれに沿って移動するオブジェクトをアニメートしています。しかし、オブジェクトがユーザタップの検出時にカーブのある点で停止するとします。次に、ボタンをクリックして移動を再開すると、オブジェクトは残りのパスに沿って最後まで移動する必要があります。私はこれをどのようにして行うのですか?BezierPath animation

CAKeyFrameAnimationオブジェクトにパスを追加すると、レジュームボタンをクリックすると、オブジェクトはパスの開始から終了まで右に移動します。停止した時点からではありません。私はそれが停止した点からだけ移動し続け、最初から開始しないようにしたい。それが停止するポイントからのパスに沿ってアニメーションする方法はありますか?

答えて

3

コアアニメーションのタイミングはすべて、CAMediaTimingプロトコルで実装されています。そのプロパティの1つは、親レイヤの時間空間に対するレイヤのアニメーションタイミングを定義するspeedです。 speedプロパティを0.0に設定すると、効果的にアニメーションが一時停止されます。

アニメーションを再起動するとアニメーションが正しく終了するように、ハウスキーピングを少し時間をかけて行う必要があります。 docsの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; 
}