0

上方向または下方向にパンジェスチャを使用して正または負に回転している次のビューがあります。

ここに画像の説明を入力してください

疑問に思っているのですが、回転する量にパンされた量を正確に変換して、回転中にユーザーがビューに指を置いたままになるタイミングが正しいようにするための数式はありますか?たとえば、パンの移動が1に戻った場合、回転させるのに適切な量はどれくらいですか。

4

2 に答える 2

1

意味のある答えを出すために提供する必要のある詳細がいくつかあります。

  1. ビューをその中心(デフォルト)を中心に回転させていますか、それともアンカーポイントがありますか?
  2. ビューが回転しているので、タッチがスーパービューで厳密に垂直に移動している間、ビューがパンを定義する垂直線からさらに離れて回転するときに予想される動作は何ですか?
  3. 回転ジェスチャの代わりにパンジェスチャを使用している理由、または単に直接タッチトラッキングを使用している理由はありますか?解決するよりも多くの問題を引き起こすようです。

わかりやすくするために、ビューが中心を中心に回転していると仮定します。例として、ビューの右側から開始し、回転が±90°を超えないパンを使用します。2つのオプションがあります。

  1. 上下の動きは回転角に直線的に変換されます。つまり、特定の距離のパンは、パンの開始位置に関係なく、ビューを同じ量だけ回転させます。その場合、鍋の上限と下限を決める必要があります。それらはスーパービューの境界である可能性があります。とにかく、Y方向に移動した距離を-1から1の間の値に変換する必要があります。ここで、-1は下限を表し、1は上限を表します。2 *(dy / superview.bounds.size.height-0.5)のようなもの。これにπ/2(math.hのM_PI_2)を掛けて、範囲[-1、1]から範囲[-π/ 2、π/ 2]までスケーリングすると、加算/減算する角度が得られます。ジェスチャの開始時のビューの回転。

  2. ビューはタッチを追跡するため、その右端は常にタッチに「向けられ」ます。この場合、移動距離ではなく、スーパービュー内のタッチの位置のみが必要なため、パンはそれほど便利ではありません。ビューの中心からタッチ位置までのx座標とy座標の差としてdxとdyを計算します。次に、atan2(dy、dx)を計算すると、ビューの絶対回転角が得られます。

これがあなたを正しい軌道に乗せることを願っています。

于 2013-03-05T01:40:45.463 に答える
0

答えは、角度がpanAmount.y/rectangleWidthになるということです。

ここに証拠があります:https ://math.stackexchange.com/questions/322694/angle-of-rotated-line-segment

于 2013-03-06T19:11:52.650 に答える