0

いくつかのサブビューをタイルとして持つスクロールビューがあります。スクロールビューの「Delays content touches」と「Cancellable Content touches」が「YES」に設定されています。、およびを使用して、
各サブビューでタッチをキャプチャします。 touchesBegantouchesEndedtouchesMoved

ボタンをタップしてすぐにスクロールを開始すると、ボタンが強調表示され、スクロールビューはスクロールしません。コードは必要ありません。

何も変更せずにまったく同じことを行うと、ビューに触れるがボタンの外側に触れると、これらのタッチメソッドがトリガーされますが、スクロールビューはスクロールします。

これらのタッチメソッドで、ボタンの外側でタッチが行われたときにスクロールをキャンセルして、スクロールビューのスクロールを妨げるのと同じ動作をさせるにはどうすればよいですか?

4

3 に答える 3

3

タッチがサブビューにキャッチされたときに、このコードを touchesBegan と touchesEnded に追加して解決しました。

UIView* superView = self.view.superview;
while (superView != nil) {
    if ([superView isKindOfClass:[UIScrollView class]]) {
        UIScrollView* superScroll = (UIScrollView*)superView;
        superScroll.scrollEnabled = YES/NO; // put the right value depending on the touch method you are in
    }

    superView = superView.superview;
}
于 2013-07-07T10:55:28.097 に答える
0

UIScrollView のいずれかのサブビュー内でタッチを検出する場合は、UIScrollView をサブクラス化し、この目的のために特別に作成された touchesShouldBegin および touchesShouldCancelInContentView メソッドをオーバーライドする必要があります。

これ以外に、UIScrollView 自体がすべてのタッチを処理する傾向があり、それらをサブビューに渡さないため、サブビューでタッチを識別する方法はありません。

礼儀: - https://stackoverflow.com/a/392562/1865424

これに関してさらに問題がある場合は、喜んでお手伝いします。

于 2013-07-07T04:29:05.520 に答える
0

あなたがしようとしていることに応じて、多分あなたは追加することができます:

UILongPressGestureRecognizer *longPressDetect = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(disableScrolling:)];

[subView addGestureRecognizer:longPressDetect];

次に、scrollView のスクロールを無効にして再度有効にするメソッドを追加します。

-(void)disableScrolling:(UILongPressGestureRecognizer*)longPress {

    if (gesture.state == UIGestureRecognizerStateBegan) {
        scrollView.scrollEnabled = NO;
    }

    if (gesture.state == UIGestureRecognizerStateEnded) {
        scrollView.scrollEnabled = YES;
    }
}
于 2013-07-07T05:16:02.313 に答える