グループで3つのアニメーションを実行しています:位置、スケール、回転
しかし、私の回転アニメーションはスムーズに起こりません。それは最初は突然起こりますが、他のアニメーションはスムーズに起こります。
これが私のコードです:
//CABasicAnimation *scaleAnimation
//CABasicAnimation *moveAnimation
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
rotationAnimation.autoreverses = NO;
rotationAnimation.toValue = [NSNumber numberWithFloat: 0];//-(M_PI/3)];
//below line shows the end state, if removed, the layer will assume its initial position after animation, something which I don't want.
[layer setTransform:CATransform3DMakeRotation(0, 0, 1, 0)];
CAAnimationGroup *theGroup = [CAAnimationGroup animation];
//Code for adding all 3 animations to the group
編集:
rotationAnimation.toValue = [NSNumber numberWithFloat:-(M_PI / 3)];
アニメーション宣言の場所から最終的な変換値を削除し、デリゲートに追加しました。(アニメーショングループの場合、個々のアニメーションデリゲートはヒットせず、グループデリゲートのみが機能することに注意してください)。
委任の下で:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSString * animName = [theAnimation valueForKey:@"animationName"];
CALayer* layer = [theAnimation valueForKey:@"animationLayer"];
if ([animName isEqualToString:@"MoveZoomOut"])
{
if ([layer.name isEqualToString:@"Layer1"])
[layer setTransform:CATransform3DMakeRotation(-M_PI/3, 0, 1, 0)];
else if ([layer.name isEqualToString:@"Layer2"])
[layer setTransform:CATransform3DMakeRotation(M_PI/3, 0, 1, 0)];
else
[layer setTransform:CATransform3DMakeRotation(0, 0, 1, 0)];
}
if ([layer respondsToSelector:@selector(setContentsScale:)])
{
layer.contentsScale = [UIScreen mainScreen].scale;
}
}