1

中央のアンカーポイントを中心に回転する手を持つ丸いゲージのような UIView があります (速度計と考えてください)。レイヤー変換を使用して値を指定すると、手が正しい場所に回転するように機能しています。

ユーザーがメーターの針をドラッグして別の値に引っ張れるようにしたいと思います。ただし、その相互作用を理解するのに苦労しています-手自体で UIPanGestureRecognizer を使用して変換ポイントを取得できますが、そこから調整された手の角度をどのように計算しますか? これは実際には、何よりもジオメトリの問題のようです。

また、丸いメーターなので、移動ポイントの x 成分または y 成分だけに基づいて角度を調整したくありません。

4

1 に答える 1

2

私の理解が正しければ、これは単純な幾何学です。極座標系とデカルト座標系の間の変換です。タッチ ポイントの位置を使用して、円の周りの角度を見つけます (極座標であるかのように)。

CGPoint touchPoint = ...;
double touchTheta = atanf(touchPoint.x, touchPoint.y);

次に、針の長さ (半径) を指定して、針の終点を計算するようなことができます。

CGPoint needleEndpoint = (CGPoint){needleLength * sinf(touchTheta),
                                   needleLength * cosf(touchTheta)};
于 2013-04-17T18:24:20.903 に答える