第一次调用becomeFirstResponder时,速度很慢。Instruments 的测量时间约为 160 毫秒……当它加载完所有必须加载的内容以使键盘出现在屏幕上时,键盘就出现了!杀死大部分流畅的动画。
但是第二次,速度很快!只需2ms!
那么,我能以某种方式做到这一点吗?
第一次调用becomeFirstResponder时,速度很慢。Instruments 的测量时间约为 160 毫秒……当它加载完所有必须加载的内容以使键盘出现在屏幕上时,键盘就出现了!杀死大部分流畅的动画。
但是第二次,速度很快!只需2ms!
那么,我能以某种方式做到这一点吗?
使用 GCD
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// heavy lifting here
dispatch_async(dispatch_get_main_queue(), ^{
[someTextField becomeFirstResponder];
});
});
这最初并没有按预期工作,但是在将 GCD 应用于后台发生的一些“提升”之后它确实如此。就我而言,这是一个滚动视图
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// heavy lifting here
dispatch_async(dispatch_get_main_queue(), ^{
[_tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
});
});