私は Objective-C で単純な回転を行おうとしていますが、すぐにいくつかの問題があります。1 つのことは、CGAffineTransformRotate から得られる不一致と、その関数内で使用されたときに M_PI がどのように不一致になるかです。
これを行って、ボタンに付けたとします。一度押すと、反時計回りに 180 度回転します (ドキュメントに従っています) が、もう一度押すと、値が負でなくても時計回りに 180 度回転します。M_PI を -M_PI に変更すると、回転に違いはなく、まったく同じことが行われます。
[UIView animateWithDuration:secs delay:0.0 options:option
animations:^{
self.transform = CGAffineTransformRotate(self.transform, M_PI); //Inconsistent
} completion:nil];
ここで、M_PI を 3.141593 に変更したとします。これは、印刷時に M_PI に含まれる値です。今、ボタンを押すと、完全に正常に動作します。どちらの場合も、反時計回りに 180 度回転します。-3.141593 に変更すると、時計回りに完全にうまく機能します。
self.transform = CGAffineTransformRotate(self.transform, 3.141593); //Works
もっといじると、挙動がおかしくなる。
90 度 (pi/2) 回転させたいとします。M_PI は、値を使用するのと同じ動作をするようになりましたが、回転は本来あるべきものとは反対です。
//Should be Clockwise but rotates CounterClockwise
self.transform = CGAffineTransformRotate(self.transform, -M_PI/2);
self.transform = CGAffineTransformRotate(self.transform, -1.5707965);
//Should be CounterClockwise but rotates Clockwise
self.transform = CGAffineTransformRotate(self.transform, M_PI/2);
self.transform = CGAffineTransformRotate(self.transform, 1.5707965);
また、180 度 (PI) を超えて何かを回転させたい場合は、正または負の回転を指定しても、動作は最短ルートを回転するだけです。360度回転(2PI)しても回転しません。
なぜこれらのことが起こるのか、またそれをより一貫させるために何ができるのか? 2 つ目の質問は、物を 270 度と 360 度回転させるにはどうすればよいかということです。