UIScrollView を使用して、iPhone で大きなサイズ (320px より大きい) UI を作成します。
UIScrollView のインスタンスを作成し、それにいくつかのサブビューを追加しました。問題は、ユーザーがサブビューの外側に触れたときにのみスクロールを有効にし、ユーザーがサブビューの1つに触れたときにスクロールを停止したいということです。
ドキュメントを読んでサンプルを見つけようとしましたが、良いヒントが見つかりません。アイデアがあれば、助けてください。
UIScrollView を使用して、iPhone で大きなサイズ (320px より大きい) UI を作成します。
UIScrollView のインスタンスを作成し、それにいくつかのサブビューを追加しました。問題は、ユーザーがサブビューの外側に触れたときにのみスクロールを有効にし、ユーザーがサブビューの1つに触れたときにスクロールを停止したいということです。
ドキュメントを読んでサンプルを見つけようとしましたが、良いヒントが見つかりません。アイデアがあれば、助けてください。
UIScrollView には、プログラムでスクロールを無効にできるscrollEnabledプロパティがあります。また、スクロールの開始/終了などのイベントを表示できるデリゲート (UIScrollViewDelegate) もあります。これらのオプションを何らかの方法で組み合わせて、何かを調理できるはずです。
あなたが本当に興味を持っているプロパティ - そして私はあなたと同じ問題を抱えているので、私は実際にこれを現在テストしています - ですcanCancelContentTouches
.
このプロパティの値が NO の場合、コンテンツ ビューがトラッキングを開始すると、指の動きに関係なく、スクロール ビューはスクロールしません。
これで目的の結果が得られない場合は、 UIScrollView をサブクラス化し、touchesShouldBegin:withEvent:inContentView
メソッドをオーバーライドします。これは、受け入れられた回答が示唆するものです。
これを行う最も簡単な方法は、スクロールビューに設定delaysContentTouches
することNO
です。このようにして、デフォルトの動作が設定され、UIControl であるすべてのものがタッチをすぐにコントロールに渡し、それ以外はすべてスクロールします。
UIScrollView のいずれかのサブビュー内でタッチを検出する場合は、UIScrollView をサブクラス化し、この目的のために特別に作成されたメソッドtouchesShouldBegin
とメソッドをオーバーライドする必要があります。touchesShouldCancelInContentView
これ以外に、UIScrollView 自体がすべてのタッチを処理する傾向があり、それらをサブビューに渡さないため、サブビューでタッチを識別する方法はありません。
ではごきげんよう。
UIScrollViewControllerをサブクラス化し、touchesBegan、touchesMoved、touchsEndedメソッドをオーバーライドすることもできます。実装がスーパークラス実装を呼び出さない場合、スクロールしません。