UIScrollView
有効ページングとは、そのフレームの幅(又は高さ)の倍数で停止します。したがって、最初のステップは、ページの幅をどの程度にするかを理解することです。その幅を作りUIScrollView
ます。次に、サブビューのサイズを必要な大きさに設定し、UIScrollView
の幅の倍数に基づいて中心を設定します。
そして、もちろん他のページも見たいので、mhjoyが言った通りに設定clipsToBounds
しNO
ます。トリックの部分は、ユーザーがUIScrollView
のフレームの範囲外でドラッグを開始したときにスクロールすることです。私の解決策(私が最近これをしなければならなかったとき)は次のとおりです:
とそのサブビューを含むUIView
サブクラス(つまりClipView
)を作成しますUIScrollView
。基本的には、UIScrollView
通常の状況で想定されるもののフレームを備えている必要があります。置きUIScrollView
の中心にClipView
。確認してくださいClipView
さんがclipsToBounds
に設定されYES
、その幅が少なく、親ビューのそれを超える場合。また、にClipView
はへの参照が必要UIScrollView
です。
最後のステップは、- (UIView *)hitTest:withEvent:
内でオーバーライドすることClipView
です。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
これは基本的に、のタッチ領域をUIScrollView
親のビューのフレームに拡張します。まさに必要なものです。
もう1つのオプションは、UIScrollView
その- (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
メソッドをサブクラス化してオーバーライドすることですが、クリッピングを行うにはコンテナービューが必要であり、のフレームYES
のみに基づいていつ戻るかを決定するのは難しい場合がありますUIScrollView
。
注: サブビューのユーザー操作に問題がある場合は、Juri PakasteのhitTest:withEvent:の変更も確認してください。