UIScrollViewののスーパーで「タッチダウン」を検出するために、どのように?

StackOverflow https://stackoverflow.com/questions/2596163

質問

私はUIViewが含まれているUIScrollViewを持っていると私は、ユーザーのタップUIViewUIScrollView内の任意の時間を「タッチダウン」イベントをキャプチャすることができるようにしたい。

私は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イベントを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top