16

UIScrollView を使用して、iPhone で大きなサイズ (320px より大きい) UI を作成します。

UIScrollView のインスタンスを作成し、それにいくつかのサブビューを追加しました。問題は、ユーザーがサブビューの外側に触れたときにのみスクロールを有効にし、ユーザーがサブビューの1つに触れたときにスクロールを停止したいということです。

ドキュメントを読んでサンプルを見つけようとしましたが、良いヒントが見つかりません。アイデアがあれば、助けてください。

4

6 に答える 6

36

UIScrollView には、プログラムでスクロールを無効にできるscrollEnabledプロパティがあります。また、スクロールの開始/終了などのイベントを表示できるデリゲート (UIScrollViewDelegate) もあります。これらのオプションを何らかの方法で組み合わせて、何かを調理できるはずです。

于 2008-12-20T13:32:50.617 に答える
8

あなたが本当に興味を持っているプロパティ - そして私はあなたと同じ問題を抱えているので、私は実際にこれを現在テストしています - ですcanCancelContentTouches.

このプロパティの値が NO の場合、コンテンツ ビューがトラッキングを開始すると、指の動きに関係なく、スクロール ビューはスクロールしません。

これで目的の結果が得られない場合は、 UIScrollView をサブクラス化し、touchesShouldBegin:withEvent:inContentViewメソッドをオーバーライドします。これは、受け入れられた回答が示唆するものです。

于 2010-09-28T05:45:29.273 に答える
5

これを行う最も簡単な方法は、スクロールビューに設定delaysContentTouchesすることNOです。このようにして、デフォルトの動作が設定され、UIControl であるすべてのものがタッチをすぐにコントロールに渡し、それ以外はすべてスクロールします。

于 2009-01-21T12:22:02.070 に答える
5

UIScrollView のいずれかのサブビュー内でタッチを検出する場合は、UIScrollView をサブクラス化し、この目的のために特別に作成されたメソッドtouchesShouldBeginとメソッドをオーバーライドする必要があります。touchesShouldCancelInContentView

これ以外に、UIScrollView 自体がすべてのタッチを処理する傾向があり、それらをサブビューに渡さないため、サブビューでタッチを識別する方法はありません。

ではごきげんよう。

于 2008-12-25T06:07:29.780 に答える
2

UIScrollViewControllerをサブクラス化し、touchesBegan、touchesMoved、touchsEndedメソッドをオーバーライドすることもできます。実装がスーパークラス実装を呼び出さない場合、スクロールしません。

于 2008-12-23T17:21:27.813 に答える