少し前に同じ問題に遭遇しました。その問題の理由は覚えていませんが、これが私の解決策です。
/**
* Incrementally rotated the arrow view by a given angle.
*
* @param degrees Angle in degrees.
* @param duration Duration of the rotation animation.
*/
- (void)rotateArrowViewByAngle:(CGFloat)degrees
withDuration:(NSTimeInterval)duration {
CABasicAnimation *spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
spinAnimation.fromValue = [NSNumber numberWithFloat:self.currentAngle / 180.0 * M_PI];
spinAnimation.toValue = [NSNumber numberWithFloat:degrees / 180.0 * M_PI];
spinAnimation.duration = duration;
spinAnimation.cumulative = YES;
spinAnimation.additive = YES;
spinAnimation.removedOnCompletion = NO;
spinAnimation.delegate = self;
spinAnimation.fillMode = kCAFillModeForwards;
[self.arrowView.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
self.currentAngle = degrees;
}
そして、デリゲートメソッドを使用できます
- (void)animationDidStart:(CAAnimation *)theAnimation
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
回転させ続ける。また、程度と期間のパラメーターは非常に大きな数値になる可能性があります...これで十分な場合.
更新:
yinkouが述べたように、
spinAnimation.repeatCount = HUGE_VALF; // HUGE_VALF is defined in math.h so import it
デリゲートでアニメーションを再開するよりもはるかに優れています。
注意:
self.currentAngle は、現在の最終回転を記憶するプロパティです。
ビューを左右に回転させるには、それが必要でした。