私がこれを尋ねる理由についてのいくつかの文脈:
UIBezierPaths を使用して直接描画する UIScrollView があります。多くの/長いパスがあり、ユーザーがスクロールビューをスクロールし始めると、drawRect ですべてのパスを描画することができなくなります。
そこで、起動時にすべてのパスを (網膜を使用せず、平坦度を下げて) uiimageview に描画する場所を回避しましたscrollViewWillBeginDragging:
。このイメージビューをスクロールビューに追加し、drawRect でのパスの描画を一時的に停止します。
次に、このイメージビューをスクロールビューから削除し、これらのいずれかが起動したときに nil に設定します:
scrollViewDidEndDragging:willDecelerate:
(の場合のみdecelerate == NO
)
scrollViewDidEndDecelerating:
これはすべてうまくいきます。描画は速く、スクロールは高速です。
ただし、次の場合に 1 つの問題があります。
- ユーザーがスクロールを開始し、画面をすばやく離すと、スクロールビューが減速し始めます。
- 次に、スクロールビューがまだ減速しているときにユーザーがスクロールビューをタップすると、スクロールビューがすぐに停止します。
scrollViewDidEnd:
この時点では、どちらの関数も呼び出されません。したがって、私のイメージビューは削除されず、メモリに残ります (さらに悪いことに、非網膜の平坦度の低い曲線がまだ表示されています)。
私の質問:
減速中にユーザーが UIScrollView をタップしたことを知るにはどうすればよいですか?