iphone - 繰り返し - uiview animate options




CALayerのアニメーション終了コールバック? (4)

私は、CALayerのアニメーションのコールバックがどこにあるか(または何かがあるかどうか)疑問に思っています。 具体的には、フレーム、位置などを変更するような暗黙のアニメーションの場合は、UIViewで次のようにすることができます:

[UIView beginAnimations:@"SlideOut" context:nil];
[UIView setAnimationDuration:.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animateOut:finished:context:)];
CGRect frame = self.frame;
frame.origin.y = 480;
self.frame = frame;
[UIView commitAnimations];

具体的には、 setAnimationDidStopSelectorは、CALayerでアニメーションに必要なものです。 そんなことは何ですか?

TIA。


CAAnimationオブジェクトの設定時に、指定されたアニメーションの名前を設定できます。 animationDiStop:finishedで、提供されたアニメーションオブジェクトの名前を比較して、アニメーションに基づいて特定の機能を実行します。


あなたはCATransactionを使うことができます。それには完了ブロックハンドラがあります。

[CATransaction begin];
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
[pathAnimation setDuration:1];
[pathAnimation setFromValue:[NSNumber numberWithFloat:0.0f]];    
[pathAnimation setToValue:[NSNumber numberWithFloat:1.0f]];
[CATransaction setCompletionBlock:^{_lastPoint = _currentPoint; _currentPoint = CGPointMake(_lastPoint.x + _wormStepHorizontalValue, _wormStepVerticalValue);}];
[_pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
[CATransaction commit];

Googleでこのページを見つけた人のためのメモ:通知を受け取るオブジェクトにアニメーションオブジェクトの「委任」プロパティを設定し、そのオブジェクトの「animationDidStop」メソッドを実装することで、実際に仕事を完了できます。ファイル。 私はちょうどそれを試して、それは動作します。 私はジョーブローがそれが正しい方法ではないと言った理由を知らない。


このゴミで4時間を無駄にしました。フェードアウトするだけです。 コード内のコメントに注意してください。

   [CATransaction begin];
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    animation.duration = 0.3;
    animation.fromValue = [NSNumber numberWithFloat:0.0f];
    animation.toValue = [NSNumber numberWithFloat:1.0f];
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeBoth;
  ///  [box addAnimation:animation forKey:@"j"]; Animation will not work if added here. Need to add this only after the completion block.

    [CATransaction setCompletionBlock:^{

        CABasicAnimation *animation2 = [CABasicAnimation animationWithKeyPath:@"opacity"];
        animation2.duration = 0.3;
        animation2.beginTime = CACurrentMediaTime()+1;
        animation2.fromValue = [NSNumber numberWithFloat:1.0f];
        animation2.toValue = [NSNumber numberWithFloat:0.0f];
        animation2.removedOnCompletion = NO;
        animation2.fillMode = kCAFillModeBoth;
        [box addAnimation:animation2 forKey:@"k"];

    }];

    [box addAnimation:animation forKey:@"j"];

    [CATransaction commit];




core-animation