次のように、レイヤーのキーパスをアニメーション化することにより、Z軸を中心に1つ(または複数)の完全な回転でレイヤーをアニメーション化できtransform.rotation
ます。
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
animation.duration = .25;
animation.fromValue = [NSNumber numberWithFloat:0];
animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
[layer addAnimation:animation forKey:animation.keyPath];
キーパスtransform.rotation.x
とを使用して、X軸またはY軸を中心にアニメーション化できますtransform.rotation.y
。(transform.rotation.z
キーパスはキーパスと同じ効果がありtransform.rotation
ます。)別々の軸に同時に複数の回転を適用できます。
これを行う別の方法は、軸外のベクトルを中心に回転させたい場合におそらくうまく機能しますが、次のようなキーフレームアニメーションを使用することです。
CALayer *layer = [sender layer];
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -50;
layer.transform = transform;
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
animation.values = [NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 0 * M_PI / 2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 1 * M_PI / 2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 2 * M_PI / 2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 3 * M_PI / 2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 4 * M_PI / 2, 100, 1, 100)],
nil];
animation.duration = 2;
[layer addAnimation:animation forKey:animation.keyPath];