web-dev-qa-db-ja.com

UITapGestureRecognizerの使用時にタップされた子ビューを見つける

UIGestureRecognizersを使用しているときに、どの子ビューでイベントが発生したかを知るにはどうすればよいですか?

ドキュメントによると:

ジェスチャーレコグナイザーは、特定のビューとそのビューのすべてのサブビューに対してヒットテストされたタッチで動作します。

私が見る限り、「view」プロパティは

ジェスチャ認識エンジンが接続されているビュー。

これが親ビューになります。

67
LK.

これにより、イベントの場所で最も内側の子孫ビューが見つかります。 (その子ビューにインタラクティブな内部プライベート孫がある場合、このコードもそれらを見つけます。)

UIView* view = gestureRecognizer.view;
CGPoint loc = [gestureRecognizer locationInView:view];
UIView* subview = [view hitTest:loc withEvent:nil];

In Swift 2:

let view = gestureRecognizer.view
let loc = gestureRecognizer.locationInView(view)
let subview = view?.hitTest(loc, withEvent: nil) // note: it is a `UIView?`

In Swift 3:

let view = gestureRecognizer.view
let loc = gestureRecognizer.location(in: view)
let subview = view?.hitTest(loc, with: nil) // note: it is a `UIView?`
187
kennytm