2

私はUITableViewControllerそのデフォルトでを持っていますUITableView。テーブルを指でゆっくりとドラッグしてスクロールします。つまり、指でテーブルをフリックしません。テーブルが画面上を移動するたびscrollViewDidScrollに、コントローラーのメソッドが呼び出されます。私が指定したいくつかの条件が満たされると、これらの呼び出しの1つは、後で何らかのアクションをスケジュールするためにscrollViewDidScroll使用します。performSelector:withObject:afterDelay

ただし、指を離すまでアクションは実行されないことがわかりました。たとえば、afterDelayパラメータを2秒に設定したが、指を5秒間押し続けた場合、指を離してアクションを実行すると、3秒遅すぎます。指がまだ画面に当たっている間にアクション(UIを更新するため、メインスレッドで実行する必要がある)を実行できるようにする方法はありますか?

ありがとう!

4

1 に答える 1

9

これは、UIScrollView(UITableViewのスーパークラス)がスクロールしているときに、アプリケーションが実行していたものよりもscrollViewを優先するために、実行ループを変更するためです。これは、スクロールが可能な限りスムーズになるようにするために行われています。

このバージョンの遅延メソッドを使用してみてください。

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;

モードについては、次を含む配列から始めることをお勧めします: [[NSRunloop currentRunLoop] currentMode]NSDefaultRunLoopMode

于 2010-12-29T19:15:32.327 に答える