4

第一次调用becomeFirstResponder时,速度很慢。Instruments 的测量时间约为 160 毫秒……当它加载​​完所有必须加载的内容以使键盘出现在屏幕上时,键盘就出现了!杀死大部分流畅的动画。

但是第二次,速度很快!只需2ms!

那么,我能以某种方式做到这一点吗?

4

1 回答 1

2

使用 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];
    });
});
于 2013-07-21T23:56:33.123 回答