これは検索するのが少し難しいものでした。GoogleやSOに何をぶつけるべきかよくわからないので、以前に回答があった場合はお詫び申し上げます。
CALayer
したがって、5 秒間 (これは関係ありませんが)に適用する 2 つのアニメーションがあり、それらは無期限に繰り返されます。ユーザーの操作でこれらのアニメーションを適切に削除できるようにしたいと考えています。
インタラクションを検出するのは簡単ですが、アニメーションが 1 つのサイクルの最後に到達した時期を判断するのは簡単ではありません。これを検出することで、アニメーションが画面から厳しく削除されるのではなく、最後のサイクルを終了して停止するという効果を達成したいと考えています。
これは私が今していることであり、機能していません
- (void)attachFadeAnimation {
// Create a fade animation that compliments the scale such that
// the layer will become totally transparent 1/5 of the way
// through the animation.
CAKeyframeAnimation *fadeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
fadeAnimation.values = @[@0.8, @0, @0];
[self addAnimation:fadeAnimation withKeyPath:@"opacity"];
}
- (void)addAnimation:(CAKeyframeAnimation *)animation withKeyPath:(NSString *)keyPath {
// These are all shared values of the animations and therefore
// make more sense to be added here. Any changes here will
// change each animation.
animation.keyTimes = @[@0, @0.2, @1];
animation.repeatCount = HUGE_VALF;
animation.duration = 5.0f;
animation.delegate = self;
[self.layer addAnimation:animation forKey:keyPath];
}
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if ( !self.emanating )
[self.layer removeAllAnimations];
}
へのデリゲート呼び出しanimationDidStop:finished
は、期待していたときに呼び出されません。明らかに、ドキュメントを誤解しています。