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:の変更も確認してください。