2

UICollectionView を使用して異なるページ間をスクロールするときに、モバイル Safari と同じ機能を実装しようとしています。1 つのページが真ん中にあり、他のページの一部も見えています。

ここに画像の説明を入力

UICollectionView を使用してこのような動作を実現するのに苦労しています。1 つの画面に 3 ページを配置する方法を 1 つ見つけました。ページを小さくして、適切なインセットを設定します。しかし、ページを小さく設定し、ページングを有効にするとすぐに、ページが本来のように中央にスクロールされません。ページングを無効のままにして、UICollectionViewFlowLayout のサブクラスでこのメソッドを使用することもできます。

- (CGRect)rectForTargetPageForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

このメソッドでは、UICollectionView が停止する場所を正確に設定できます。ただし、スクロール エクスペリエンスは、ページングを有効にして UIScrollview を使用した場合ほど良くありません。より速い速度でスワイプすると、いくつかのページがスクロールされ、提案されたページで停止しました。私が達成したいのは、ページングが有効になっている通常のスクロール ビューと同じ動作です。使用する速度に関係なく、1 ページしか取得できません。

UICollectionViewを使用してこれを解決する方法を知っている人はいますか?

4

1 に答える 1

0

ページのサイズをスクロール ビューのサイズよりも小さくしたいのですね。ページ サイズは常にスクロール ビューのサイズと同じなので、スクロール ビューを小さくする必要があります。

次に、別の問題があります。スクロールビューの境界外のタッチを受け取る方法は?

スクロール ビューをオーバーライド-[UIView pointInside:withEvent:]して、実際よりも大きな境界をチェックします。その後、タッチが機能するはずです。


実際、私はこれを自分で試していませんでした。目的の境界とオーバーライドで補足ビューを上に配置することでそれを行っていました-[UIView hitTest:withEvent:]。内部でポイントを変更し、スクロール ビュー ヒット テストを呼び出しました。このように、タッチはスクロール ビューで処理されましたが、位置が間違っていました。これら 2 つのアプローチを組み合わせて、正しい位置を取得することをお勧めします。

于 2013-01-25T19:21:35.850 に答える