3

私はUIScrollView内側に別のものを持っていUIScrollViewます。外側のスクロール ビューはページングを処理し、内側のスクロール ビューはズームを処理します (ズームをサポートする画像ギャラリーです)。シングルタッチを無視して外側のスクロールビューに移動するには、内側のスクロールビューが必要です。

これは を使用して行うことができます[innerScrollView setUserInteractionEnabled:NO]が、明らかに内側のスクロール ビューでのピンチとパンのジェスチャもオフになります。ピンチとパンのジェスチャーを内側のズーム ビューで処理し、他のすべてのイベントをレスポンダー チェーンに転送する方法はありますか?

PS。問題を解決するために、いつでも委任のハックを提供できます。通常のレスポンダー チェーンを使用して動作させる簡単な方法があるかどうか知りたいです。

4

2 に答える 2

3

私が発見したこと: シングルタップ イベントは、最終的touchesBegan:withEvent:に、内側のスクロール ビュー内のコンテンツ ビューに移動します。このコンテンツ ビューはメソッドを実装せず、デフォルトのUIView実装はイベントをレスポンダー チェーンに渡します。ここに、 を実装する内部スクロール ビューがありますtouchesBegan:withEvent:。この実装はシングル タップを飲み込み、レスポンダー チェーンには何も上がりません。助けにUIScrollViewなったのは、レスポンダーチェーンを手動でサブクラス化し、修正を送信することです。

- (void) touchesBegan: (NSSet*) touches withEvent: (UIEvent*) event
{
    [[self nextResponder] touchesBegan:touches withEvent:event];
}

もちろん、少なくともtouchesEnded:withEvent:このように転送することも良いことです。これは私が必要とするすべてを行います。内側のスクロール ビューはズームとパンを処理でき、外側のスクロール ビューはシングルタップ イベントを受け取ります。ズームインして右にパンし、次のページに移動することもできます。

于 2012-06-13T08:53:54.703 に答える
2

iOS 5 では、UIScrollViews はそのpanGestureRecognizerと を公開しpinchGestureRecognizerます。

そのため、古い iOS バージョンをサポートする必要がない場合は、innerScrollView.panGestureRecognizer.minimumNumberOfTouches = 2.

編集:これは機能しません。scrollView はまだタッチを飲み込んでいます。今後の参考のためにここに残しておきます。

内側のscrollViewでパンをまったく処理したくない場合は、おそらく(私は試していませんが)panGestureRecognizerを削除するだけです。

于 2012-06-13T08:37:39.990 に答える