私のiPhoneアプリには、別のUIButtonが押されたときに180度回転して表示されるUIButtonがあり、もう一度クリックすると、ボタンはさらに180度回転して最初の場所に戻ります。
これは、完全な 360 度プロセスが最初に発生したときにすべて正常に機能しますが、最初からやり直そうとすると、180 度スナップし、その時点から回転しようとします。誰かが私を正しい方向に向けることができますか? これまでの私のコードは次のとおりです...
showAnimation= [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];
showAnimation.duration = self.showAnimationDuration;
showAnimation.repeatCount = 1;
showAnimation.fillMode = kCAFillModeForwards;
showAnimation.removedOnCompletion = NO;
showAnimation.cumulative = YES;
showAnimation.delegate = self;
float currentAngle =[[[rotateMe.layer presentationLayer] valueForKeyPath:@"transform.rotation.z"] floatValue];
//Rotate 180 degrees from current rotation
showAnimation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:currentAngle],
[NSNumber numberWithFloat:currentAngle + (0.5 * M_PI)],
[NSNumber numberWithFloat:currentAngle + M_PI], nil];
[rotateMe.layer addAnimation:showAnimation forKey:@"show"];
アニメーションが完了したら、rotateMe.transform の回転をレイヤーの回転に更新して、使用できるようにします。
- (void)animationDidStop:(CAKeyframeAnimation *)anim finished:(BOOL)flag
{
float currentAngle =[[[self.layer presentationLayer] valueForKeyPath:@"transform.rotation.z"] floatValue];
NSLog(@"End: %f", currentAngle);
rotateMe.transform = CGAffineTransformMakeRotation(0);
}
私は完全に機能する効果を達成しました
[UIView animateWithDuration:1.0f]
animations:^{
CGAffineTransform transform = CGAffineTransformRotate(rotateMe.transform, DEGREES_TO_RADIANS(179.999f));
rotateMe.transform = transform;
}
];
しかし、アニメーションをもっと複雑にしたいので、CAKeyframeAnimation.