1

私は垂直UIScrollView内の水平内に多方向を持っています。最も内側のscrollViewの水平方向のコンテンツ制限に達すると、含まれている水平方向のscrollviewが希望どおりにスクロールを開始します。UIScrollViewUIScrollView

しかし、最も内側のscrollViewの垂直方向のコンテンツ制限に達すると、最上位の垂直方向のscrollViewでアクションが発生しません。

すべての垂直コンテンツが最も内側のレベルで表示されている場合(したがって、垂直スクロールは不可能です)、最上位の垂直スクロールビューが正常に引き継がれます。これを修正する方法についての手がかりはありますか?

アップルの「PhotoScroller」サンプルコードで、写真ページングのscrollViewを垂直のscrollViewに埋め込むと、これと同じ動作が得られます。写真がズームされていない場合は、水平スクロールビューと垂直スクロールビューの両方が機能します。写真がズームされているが、水平または垂直の制限に達したためにパンが停止した場合は、水平スクロールビューのみが機能します。

これは、写真のページングをUIPageViewControllerではなくUIScrollViewとして実装する古いバージョンのサンプルコードを使用しています。現在のUIPageViewControllerバージョンでは、写真をズームしたときにページングは​​できません。

4

1 に答える 1

0

私自身の質問に答えるために、私はgestureRecognizerShouldBegin:デリゲートを使用して、パン ジェスチャが開始されたときに最も内側の scrollView が境界にあったかどうかを判断しました。もしそうなら、shouldRecognizeSimultaneouslyWithGestureRecognizer: delegate に応答して、内部 scrollView と垂直 scrollView の両方で UIPanGestureRecognizer を有効にしました。これにより、1 つのジェスチャで両方を同時にスクロールできました。次に、両方の scrollView で setContentOffset をオーバーライドして、間違ったスクロールを抑制しました。

より良い答えはおそらく、内側の UIScrollView の UIPanGestureRecognizer を、境界で開始して境界を越えてドラッグするとキャンセルされるカスタム ジェスチャ認識エンジンに置き換えることだと思います。しかし、私はそれを機能させることができませんでした。

これの水平バージョンが自動的に機能した理由はまだわかりません。おそらく、UIScrollViewPanGestureRecognizer には、水平方向のケースを処理するための特別なケース処理、または直接の superView との相互作用があります。

于 2012-09-30T16:09:29.663 に答える