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