1

パンされたときにオブジェクトの座標を取得する次のコードがあります。

UITapGestureRecognizer *moveBuildingTap = [[UITapGestureRecognizer alloc]
                                           initWithTarget:self action:@selector(moveobject:)];

メソッドmoveobjectの内容:

CGPoint tapPoint=[recognizer locationOfTouch:0 inView:self.view];

これを使用して、これらの座標を使用してイメージビューのフレームを変更します。

ただし、画像をドラッグして-uipangesturerecognizerアクションをトリガーすると、画像を最下部にドラッグすると、-[UIPanGestureRecognizer locationOfTouch:inView:]:インデックス(0)が境界(0)を超えているというエラーが発生することがわかりました。

この例外を解決し、ユーザーがこのポイントを超えてドラッグするのを防ぐにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

moveobject:ジェスチャレコグナイザーのプライベートタッチ配列が空のように見えても、メソッドが呼び出されるのは奇妙です。

とにかく、一般的に、ジェスチャレコグナイザ内でマルチタッチジェスチャを処理しない場合は、[recognizer locationInView:]ではなくを使用することをお勧めしますlocationOfTouch:inView:

ところで:

UIPanGestureRecognizer使用しているコードでしばらく話しているUITapGestureRecognizer

特定のビューのドラッグを処理するために推奨するコードは、次のようになります。

//...
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[someView addGestureRecognizer:panGR];
//...

- (void)handlePan:(UIPanGestureRecognizer *)gr
{
    CGPoint translation = [gr translationInView:gr.view];
    gr.view.frame = CGRectOffset(gr.view.frame, translation.x, translation.y);
    [gr setTranslation:CGPointZero inView:gr.view];
}
于 2012-11-05T22:43:40.427 に答える
3

numberOfTouchesあなたはあなたのようにチェックする必要がありますUIGestureRecognizer

if (recognizer.numberOfTouches) {
      CGPoint tapPoint = [recognizer locationOfTouch:0 inView:self.view];
}
于 2015-04-24T12:18:15.543 に答える