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