0

同時に開始し、同じ曲線を使用する 2 つのコア アニメーションを作成しようとしていますが、条件が満たされた場合、そのうちの 1 つを停止する必要があります。たとえば、左側に次のビューがあり、右側のビューに移行したいと考えています。

ここに画像の説明を入力

赤色のビューは、最初は交差していなくても、黄色のビューの上のオーバーレイとして扱うことができます。「項目 3」をクリックすることを想像してください。私がする必要があるのは、距離を置いてすべての行の動きを上にアニメーション化することですが -item3.frame.origin.ytitle3画面の一番上に到達するとそこに留まるため、残りの行item1 item2は後ろにスライドしているように見えますtitle3

オプションでコアアニメーションを使用してすべての要素をアニメーション化しようとしました:UIViewAnimationsOptionLayoutSubviewsそしてlayoutSubview、次のコードでアニメーションを停止します:

-(void)layoutSubviews {
    CALayer* presentationLayer = (CALayer*)[self.title3.layer presentationLayer];
    if (presentationLayer.frame.origin.y <= 0) {
        [self.title3.layer removeAllAnimations];
    }
}

しかし、何の成功もありません。コア アニメーションを使用し、モックを作成せずに機能させる方法はありますかCADisplayLink。title3 アニメーションの継続時間は計算が難しく、アニメーション曲線が線形でない場合にtitle3との間にギャップが生じるため、2 つの別々のアニメーションを使用することはできません。title2

4

1 に答える 1

0

次のコードで、 Apple のテクニカル ノート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;
}
于 2013-11-12T21:52:33.670 に答える