1

iPhone用のアプリケーションを開発していますが、ユーザーが特定のパスに沿って指を動かしていることを検出したいと思います。

具体的には、ユーザーが特定の円形パスに沿って指を動かしたときを検出したいと思います。

これはおそらく、パスに沿ったマウスの動きを検出することで簡単に適応できます。

4

2 に答える 2

1

特定のケースの実装はかなり簡単なようです。入力領域を4つの象限に分割し、各象限の位置を追跡します。一連の象限は、それらが完了したか、円を描いて移動したかを決定します。

アイデアを説明するための擬似コード:

static touchKeeper; //touch, quadrant
static touchIndex=0;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
   touchKeeper[touchIndex].touch =  touch;
   touchKepper[touchIndex].quadrant = DetectQuadrant(touch));
   if (touchIndex > 3 && (touchKeeper[3].quadrant == touchKeeper[2].quadrant+1 == touchKeeper[1].quadrant+2 == touchKeeper[0].quadrant+3)) {
     [self doCircleAction];
     touchIndex=0;
   } 
     else touchIndex++;
 }

アイデアは、地域への特定のタッチを大まかに識別するだけでよいということです。したがって、象限ルーチンは次のようになります。

int DetectQuadrant(UITouch *touch) {
 CGPoint point;
 point = [touch locationInView:self];
 if (endPoint.x > X1 && endPoint.x < X2 && endPoint.Y > Y1 && endPoint.Y < Y2)
  return QUAD1;
 } else etc

例として象限を使用します。明らかに、正方形を描いて「円」と考えることができます。Detectメソッドでより多くの領域を作成することにより、精度が向上します。主なアイデアは、過度の複雑さ(ベジェ曲線の検出や同様のナンセンスなど)なしで目的の動作を実現するために、領域のシーケンスの観点から考えることです。この擬似コードは確かに野蛮であり、実装を洗練するための良い方法があると確信しています。私が取り組んでいるプロジェクトの「円運動検出」について考えていましたが、これは私が思いついた大まかなアイデアでした。

楽しみ!

于 2009-03-14T18:04:32.370 に答える
0

私はiPhoneSDK自体に精通していないため、非標準のジェスチャをキャプチャするための機能が組み込まれているかどうかはわかりません。ただし、これは手動で行う方法の1つです。

このチュートリアルはFlashを対象としていますが、同じジェスチャーの原則に基づいて動作します。各方向は数字を表します。ポインティングデバイスで円をトレースすると、時間の経過または距離のいずれかで移動した方向を表す一連の数字が生成されます。その数列を、円を表す事前定義された数列と比較します。それらが一致する場合は、イベントを発生させます。

この「ファジー」のようなジェスチャを作成する方法を説明するチュートリアルがたくさんあるので、より正確でないポイントモーションが必要になります。

于 2009-03-14T16:14:32.353 に答える