1

私はUIScrollViewに入れているかなり大きな(スクリーンエステート内の)UIControlを持っています。UIControl であるため、すべてのタッチをハイジャックし、コントロール内から開始されるドラッグは UIScrollView に反映されません。

このコントロールは UIControlEventTouchUpInside のみを必要とするため、そのイベントを「のみ」リッスンする方法はありますか?

私の最初の本能は、hitTest:withEvent: をオーバーライドし、ドラッグが検出された場合にスーパービューを返すことでしたが、それはコントロール イベントのタイプに関する情報を提供しません。

私の最後の手段は、それを一般的な UIView にすることですが、可能であればその道をたどりたくありません。

編集:

申し訳ありませんが、わかりやすくするために、作業中の画面で他の機能をサポートするために、意図的に delaysContentTouches を NO に設定しています。意図しない副作用が Joel H の 2 番目のポイントになります。

4

1 に答える 1

0

UIScrollViewのcanCancelContentTouchesとプロパティの両方を YES に設定してみてください。delaysContentTouches

UIScrollView プロパティcanCancelContentTouchesが YES に設定されている場合、スクロール/ドラッグ タッチをスクロール ビューに転送し、そのタッチがサブビューに登録されていたものをキャンセルする必要があります。

スクロール ビューdelaysContentTouchesも YES に設定する必要があります。これにより、ドラッグがタップとしてトリガーされるのを防ぎます (ハンドラーの起動が早すぎるため)。

UIScrollView クラス リファレンス

于 2013-09-05T20:17:51.333 に答える