我有一些自定义 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 吗?