29

UIScrollView(またはテーブルビュー)内にある場合、タッチダウンしたときにUIButtonの強調表示された状態がわずかに遅れることに気づきました。それ以外の場合、強調表示された状態はほとんど瞬時に発生します。

これは、ユーザーがスクロールする機会を提供するための設計によるものである必要があると思います。しかし、ボタンが私に反応しないようです。これを修正する方法はありますか?

4

1 に答える 1

63

確かに、それは設計上の選択です。スクロール(panGesture)とタップを区別するには、この短い時間が必要です。この遅延をなくすと、ユーザーがボタンの上に指を置いた場合、ユーザーはスクロールできなくなります。これは、ユーザーエクスペリエンスが良くありません。

スクロールビューにはスクロールバーがないため、タッチがスクロールの意図とコンテンツのサブビューの追跡の意図のどちらを示しているかを知る必要があります。この決定を行うために、タイマーを開始してタッチダウンイベントを一時的にインターセプトし、タイマーが起動する前に、タッチしている指が何らかの動きをするかどうかを確認します。位置を大幅に変更せずにタイマーが起動した場合、スクロールビューは、コンテンツビューのタッチされたサブビューに追跡イベントを送信します。

UIScrollViewドキュメントから

遅延を無効にすることはお勧めしませんが、必要に応じて、Interface Builderで設定するか(スクロールビューを選択し、右側のパネルの[バウンスズーム]のすぐ下)、次のコードを使用して設定できます。

scrollView.delaysContentTouches = false
于 2011-09-24T20:00:39.877 に答える