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