0

ジェスチャ レコグナイザー ハンドラーでは、レコグナイザーがアタッチされている/応答している画面上のアイテムを知る必要があります。たとえば、ユーザーが画像をタップした場合、ハンドラーはどの画像がタップされたかをどのように確認できますか?

4

2 に答える 2

9

ジェスチャ レコグナイザーを作成するときは、常にそれをビューに関連付けます。ジェスチャが検出され、作成されたジェスチャに関連付けられたセレクターが呼び出されると、gesture.View を使用して、ジェスチャに関連付けられたビューを把握できます。

ここにコード例があります

UIImageView *imageView = self.someImageView;
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageSingleTapped:)];
[imageView addGestureRecognizer:singleTapGesture];

[singleTapGesture release]; 


- (void) imageSingleTapped:(UIGestureRecognizer*)recognizer
{
     UIView *viewTiedWithRecognizer = recognizer.view; // This is the view associated with gesture recognizer.
}
于 2012-05-17T19:43:53.480 に答える
1

それにも問題がありました。正しい解決策があるかどうかはわかりませんが、これが私がやったことです。

CGPoint point = [gestureRecognizer locationInView:self];
CGPoint offset = self.scrollView.contentOffset;
CGPoint contentPoint = CGPointMake(point.x + offset.x, point.y + offset.y);

for (UIView *view in self.scrollView.subviews)
    if (CGRectContainsPoint(view.frame, contentPoint))
        return view;

return nil;

ブルートフォースとも呼ばれます。


今見てみるとバグだらけ。ユーザーがスクロール バーに直接触れた場合、スクロール バーが返されるビューになる可能性があります。私はそれが起こったことはありません (少なくとも私が知る限り) が、それでもテストして解決策を作成する必要があります。

于 2012-05-17T18:53:01.790 に答える