2010-11-19 9 views
2

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

しかし、私は指を離すまでアクションが実行されないことを発見しています。たとえば、afterDelayパラメータを2秒に設定しても、指を5秒間保持すると、指を離してそのアクションが実行されると3秒遅れとなります。指を画面上に置いたまま実行するアクション(UIを更新するためにメインスレッドで実行する必要があります)を許可する方法はありますか?

ありがとうございます!

+0

: http://stackoverflow.com/questions/2865760/performselectorwithobjectafterdelay-not-working-from-scrollviewdidzoom –

答えて

8

これは、UIScrollView(UITableViewのスーパークラス)がスクロールしているときに、アプリケーションが何をしていたとしても、scrollViewに優先順位を付けるためにrunloopを変更するためです。これはスクロールができるだけ滑らかであることを確認するために起こっています。私は、次のものが含ま配列から始まることをお勧めしたい、モードごと

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

遅延方法のこのバージョンを使用してみてください、誰も他の人の将来の参考のため [[NSRunloop currentRunLoop] currentMode]NSDefaultRunLoopMode

+2

あなたの答えをありがとう!それは本当に私を助けました。しかし、わずかに異なる配列の場合:[NSArray arrayWithObject:NSRunLoopCommonModes] – Miroslav

+0

NSRunLoopCommonModesは遅延実行の作業を行います。ありがとうMiroslav – mitrenegade

+0

ありがとうございました!あなたは私の日を救う!) – user2154220

関連する問題