6

最近CATransform3Dを使い始めましたが、とてもいい感じです。ただし、ローテーションに1つの問題があります。ビューを右に360度回転させようとしていますが、パス360をCATransform3DRotateに配置しただけでは、機能しません(まったく移動しません)。

これが私のコードです:

      CALayer *layer = dock.layer;
      CATransform3D r = CATransform3DIdentity;
      r.m34 = 1.0 / -500;
      r = CATransform3DRotate(r, DegreesToRadians(360.0f), 100.0f, 1.0f, 100.0f);   
      layer.transform = r;

誰かがこの問題を修正する方法を知っていますか?前もって感謝します!:)

4

1 に答える 1

23

次のように、レイヤーのキーパスをアニメーション化することにより、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];
于 2012-07-20T02:58:49.087 に答える