注: これはパフォーマンスの問題ではありません。UITableView でのセルのデキューの利点を認識しています。
テストのために、白いスクロールビューに黒い背景色があり、それらの間に100ポイントの間隔があるいくつかの単純な不透明なUIViewサブビューを持つUIScrollViewを作成したので、スクロールするものがあります。非常に軽量。他には何もありません。本当に私を信じてください、それは重くありません。
スクロール ビューのスクロールの開始と、テーブル ビューのスクロールの開始には大きな違いがあることに気付きました。
スクロール ビューにタッチしてすぐにドラッグを開始すると、約 0.25 秒遅れて、突然追いつきます。そこからは流動的で、タッチアップして再びタッチダウンするまでラグはありません。
はるかに大きく複雑な UITableView では、同じことを行うと、スクロールが開始されるまでに0.25秒の初期遅延はありません。
可能なすべてのプロパティを変更しようとしましたが、このばかげた遅延をなくすことはできません。サブビューでタッチが発生することを意図しているかどうかを把握したいスクロールビューに関係していると思います。次に、ユーザーが指を動かしすぎているかどうかを確認します。次に、スクロールを開始します。
クレイジーなことは、UITableViewがUIScrollView自体であり、UIScrollViewをUITableViewと同じくらい速くスクロールさせたいということです。どのように?
編集: Sh..何かクレイジーなものを見つけました!
NSLog(@"GR = %@", self.gestureRecognizers);
GR = (
"<UIScrollViewDelayedTouchesBeganGestureRecognizer: 0x13e930;
state = Possible;
delaysTouchesBegan = YES;
view = <TestScrollView 0x13e380>;
target= <(action=delayed:, target=<TestScrollView 0x13e380>)>>",
"<UIScrollViewPanGestureRecognizer: 0x13ee00;
state = Possible;
delaysTouchesEnded = NO;
view = <TestScrollView 0x13e380>;
target= <(action=handlePan:, target=<TestScrollView 0x13e380>)>>"
)
これは iOS 4 であり、iOS4 には panGestureRecognizer プロパティはありません。最も疑わしいのは、UIScrollViewDelayedTouchesBeganGestureRecognizer と delaysTouchesBegan です。くそ!iOS4でそれをNOに設定するにはどうすればよいですか?