通常の状態から押された状態、選択された状態になるカスタム UIControl があります。アプリケーションのロジックにより、ユーザーが指を離すと、コントロールが選択され、いくつかのビューが読み込まれます。ビューはかなり大きく、多くのデータと複雑なビューが含まれています。その結果、ユーザーが指を離すと、ディスプレイは約 100 ~ 400 ミリ秒間フリーズし、ユーザーが期待したとおりに表示されます。コントロールが選択された状態になるまでの長い遅延は、エラーのように感じます。それを修正するために、次のことを行いました。
-(IBAction)didTapControl:(UIControl*)sender{
sender.selected = YES;
double delayInSeconds = 0.05;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//perform some long running task
}
}
ただし、その 0.05 は単なる推測であり、ビューの表示を不必要に 0.05 遅らせている可能性があります。私が本当にしたいのは、ビューがボタンを選択した状態で更新を終了し、すぐに実行時間の長いタスクを実行することです。このアクションのタイミングを合わせる良い方法はありますか? これにはdispatch_afterを使用する必要がありますか?