私は、最良の時でもラジアンにかなり混乱しているので、UIView を回転させるときは度単位で作業する傾向があります。これまでのところ、次の式を使用して度をラジアンに変換してきました。
#define radians(x) (M_PI * x / 180.0)
ここまでは順調ですね。ユーザーが360度以上回転している画面にUIViewがあり、画像が回転した度数を画面に表示したい場合に問題が発生します。私はこれを持っており、180度まで正常に動作します:
float rot = [recognizer rotation];
[self.steeringWheel setTransform:CGAffineTransformRotate([self.steeringWheel transform], (rot))]; // turn wheel
CGFloat radians = atan2f(steeringWheel.transform.b, steeringWheel.transform.a);
CGFloat degrees = radians * (180 / M_PI);
self.degreesBox.text = [NSString stringWithFormat:@"%1.0f", degrees]; // show degrees of rotation on screen
180度の後、私の読み取り値は-179、-178などに変わり、ゼロに戻ります。代わりに、最大 359 までカウントし続けたい (可能であれば、ゼロ、1、2 などに戻る)。
179 に 2、178 に 3 などを加算する式を使用して適切な量を取得することもできますが、ホイールを反対方向に回すとうまくいきません (-1 度の回転は 359 と表示されます)。本当に 1 または -1 として読み上げたい場合)。
これが理にかなっていることを願っています。基本的には、ホイールが開始点から各方向にどれだけ回転したかを読み取りたいと考えています。私が今得ているのは、最短ルートを経由して開始点まで何度戻ったかの読み取りです。