CALayer 90度を回転させる方法を教えてください。サブレイヤーと座標系を含むすべてを回転させる必要があります。
私がそれをアニメートしている場合、私は自分のアプリで次のようなものを使用します:
- (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;
}
もちろん、どこでも使用できます。ニーズに合わない場合は、メソッドから返す必要はありません。
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軸を中心に行われます。
基本的にそのようなもの:
CGAffineTransform rotateTransform = CGAffineTransformMakeRotation(M_PI / 2.0); [myCALayer setAffineTransform:rotateTransform];
編集:プラットフォーム(iOSまたはMac OS)に応じて、時計回りまたは反時計回りに回転します。
右に90度回転するには:
myView.transform = CGAffineTransformMakeRotation(M_PI_2);
RabはCAAnimation
オブジェクトでそれを行う方法を示しました。実際にはそれよりも単純です。
[myView animateWithDuration: 0.25
animations:
^{
myView.transform = CGAffineTransformMakeRotation(M_PI/2);
}
];
(Chrisの答えから変換行を持ち上げます-完全なコードをすでに提供しているため、書き直すのが面倒です)
Chrisのコードは、アニメーションなしでビューを回転します。上記の私のコードはアニメーションでも同じことを行います。
デフォルトでは、アニメーションはイーズイン、イーズアウトのタイミングを使用します。少し複雑なバージョンのanimateWithDuration
呼び出しでこれを変更できます(代わりにanimateWithDuration:delay:options:animations:completion:
を使用し、必要なタイミングをオプションパラメータに渡します)。