には 2 つの回転アニメーションがありますCAAnimationGroup
。1 つはゼロから開始し、もう 1 つはその状態から繰り返して自動反転します。
- (void)addWobbleAnimationToView:(UIView *)view amount:(float)amount speed:(float)speed
{
NSMutableArray *anims = [NSMutableArray array];
// initial wobble
CABasicAnimation *startWobble = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
startWobble.toValue = [NSNumber numberWithFloat:-amount];
startWobble.duration = speed/2.0;
startWobble.beginTime = 0;
startWobble.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[anims addObject:startWobble];
// rest of wobble
CABasicAnimation *wobbleAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
wobbleAnim.fromValue = [NSNumber numberWithFloat:-amount];
wobbleAnim.toValue = [NSNumber numberWithFloat:amount];
wobbleAnim.duration = speed;
wobbleAnim.beginTime = speed/2.0;
wobbleAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
wobbleAnim.autoreverses = YES;
wobbleAnim.repeatCount = INFINITY;
[anims addObject:wobbleAnim];
CAAnimationGroup *wobbleGroup = [CAAnimationGroup animation];
wobbleGroup.duration = DBL_MAX; // this stops it from working
wobbleGroup.animations = anims;
[view.layer addAnimation:wobbleGroup forKey:@"wobble"];
}
CFTimeInterval は double として定義されているため、アニメーション グループの期間を に設定しようとしましたDBL_MAX
が、アニメーション グループの実行が停止します。ただし、10000 などの大きな数値に設定すると、問題なく動作します。CAAnimationGroup
可能な限り無限に近く実行されるように、a の期間に使用できる最大数は何ですか?
更新:のように非常に大きな値をDBL_MAX / 4.0
入力すると、1 秒間フリーズしてからアニメーションを開始するようです。値DBL_MAX / 20.0
を入力すると、最初のフリーズははるかに小さくなります。期間の値が非常に大きいため、フリーズしているようです。期間に非常に大きな値を使用する以外に、これを行うより良い方法はありますか?