UIScrollViewののスーパーで「タッチダウン」を検出するために、どのように?
-
25-09-2019 - |
質問
私はUIView
が含まれているUIScrollView
を持っていると私は、ユーザーのタップUIView
にUIScrollView
内の任意の時間を「タッチダウン」イベントをキャプチャすることができるようにしたい。
私はUIViewController
がメインUIScrollView
に含まれる内部のタップ時にクビに私のUIView
が、それらのどれものすべてのtouchesBegan /エンド/キャンセルハンドラを含むしようとしました。
これは何を達成するための最良の方法です?
解決
のUIViewでは、touchesBeganを実装します:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// assign a UITouch object to the current touch
UITouch *touch = [[event allTouches] anyObject];
// if the view in which the touch is found is myScrollView
// (assuming myScrollView is the UIScrollView and is a subview of the UIView)
if ([touch view] == myScrollView) {
// do stuff here
}
}
サイドノート:確認しuserInteractionEnabledはUIViewの中にYESに設定されている。
他のヒント
また、あなたのUIViewサブクラスでhitTest:withEvent:
を実装することができます。この方法は、タッチイベントを受信する必要があるサブビューを決定するために呼び出されます。だからここにあなたはどちらかだけのあなたの視野を通過するすべてのイベントを追跡していないか、サブビューからのイベントの一部を非表示にすることができます。この場合、あなたはscrollviewのため無効にユーザーとの対話に必要ないかもしれません。
UIView
クラス参照で、この方法の詳細を参照してください。
また、あなたのスーパーにジェスチャー認識を追加することができます。 たとえば、あなたがスクロールビューを重ねるボタンなどの有効化/無効化のものに必要がある場合は、タップジェスチャーます:
self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;
["containerView" addGestureRecognizer:tap];
ジェスチャーがスクロールビューの相互作用を維持行う
あなたのようなスクロールビューを無効にユーザーとの対話に必要な...
scrollView.userInteractionEnabled = NO;
無効にすると、UIScrollViewののスーパーは、touchesBeganイベントを取得します。