web-dev-qa-db-ja.com

CALayerを90度回転しますか?

CALayer 90度を回転させる方法を教えてください。サブレイヤーと座標系を含むすべてを回転させる必要があります。

30
Kristina Brooks

私がそれをアニメートしている場合、私は自分のアプリで次のようなものを使用します:

- (NSObject *) defineZRotation {
    // Define rotation on z axis
    float degreesVariance = 90;
    // object will always take shortest path, so that
    // a rotation of less than 180 deg will move clockwise, and more than will move counterclockwise
    float radiansToRotate = DegreesToRadians( degreesVariance );
    CATransform3D zRotation;
    zRotation = CATransform3DMakeRotation(radiansToRotate, 0, 0, 1.0);  
    // create an animation to hold "zRotation" transform
    CABasicAnimation *animateZRotation;
    animateZRotation = [CABasicAnimation animationWithKeyPath:@"transform"];
    // Assign "zRotation" to animation
    animateZRotation.toValue = [NSValue valueWithCATransform3D:zRotation];
    // Duration, repeat count, etc
    animateZRotation.duration = 1.5;//change this depending on your animation needs
    // Here set cumulative, repeatCount, kCAFillMode, and others found in
    // the CABasicAnimation Class Reference.
    return animateZRotation;
}

もちろん、どこでも使用できます。ニーズに合わない場合は、メソッドから返す必要はありません。

13
Rab

Obj-C:

theLayer.transform = CATransform3DMakeRotation(90.0 / 180.0 * M_PI, 0.0, 0.0, 1.0);

迅速:

theLayer.transform = CATransform3DMakeRotation(90.0 / 180.0 * .pi, 0.0, 0.0, 1.0)

つまり、90度(π/ 2ラジアン)回転するようにレイヤーを変換します。その回転の100%はz軸を中心に行われます。

50

基本的にそのようなもの:

CGAffineTransform rotateTransform = CGAffineTransformMakeRotation(M_PI / 2.0); [myCALayer setAffineTransform:rotateTransform];

編集:プラットフォーム(iOSまたはMac OS)に応じて、時計回りまたは反時計回りに回転します。

8
SteamTrout

右に90度回転するには:

myView.transform = CGAffineTransformMakeRotation(M_PI_2);
3
Chris

RabはCAAnimationオブジェクトでそれを行う方法を示しました。実際にはそれよりも単純です。

[myView animateWithDuration: 0.25 
  animations:
  ^{
     myView.transform = CGAffineTransformMakeRotation(M_PI/2);
   }
];

Chrisの答えから変換行を持ち上げます-完全なコードをすでに提供しているため、書き直すのが面倒です)

Chrisのコードは、アニメーションなしでビューを回転します。上記の私のコードはアニメーションでも同じことを行います。

デフォルトでは、アニメーションはイーズイン、イーズアウトのタイミングを使用します。少し複雑なバージョンのanimateWithDuration呼び出しでこれを変更できます(代わりにanimateWithDuration:delay:options:animations:completion:を使用し、必要なタイミングをオプションパラメータに渡します)。

0
Duncan C