我一直在调用-becomeFirstResponder
一个UITextField
包含在模态显示的视图控制器中的一些问题。我在模态视图控制器的方法中调用此方法,-viewDidLoad
以便立即显示键盘。我期望键盘和模态视图控制器同时从屏幕底部开始动画。但是,我观察到的是以下内容:
- 在单击调用
-presentModalViewController:animated:
父视图控制器上的方法的按钮和子视图控制器开始以模态方式设置动画之间存在约 0.2 秒的 UI 延迟。 - 一旦模态视图控制器的动画开始,键盘立即呈现绝对没有动画。
- 一旦模态视图控制器的动画完成,其他一切似乎都运行顺利。
- 关闭模态视图控制器会导致它在屏幕外平滑动画(巧合地与键盘一起)。
- 在第一次之后的任何时间单击呈现模态视图控制器的按钮都会导致相同的模式,除了没有 ~0.2 秒的 UI 延迟。
就好像键盘的动画和模态视图控制器的动画都在同时竞争一些较低级别的核心动画资源,但我不明白为什么会发生这种情况。似乎进一步证实了这种预感的是,如果我不要求UITextField
成为第一响应者(即,如果我不要求键盘呈现自己),那么绝对没有 UI 滞后,并且模态视图控制器动画即刻。
有趣的是,如果我做类似的事情[self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001];
,那么键盘的动画几乎与模态视图控制器的动画同时发生——当在 iPhone 上运行时,很难说它们不是同时被动画模拟器。然而,当在实际设备上运行时,很容易注意到键盘直到模态视图控制器出现后才会出现。但重要的是,不再有 UI 滞后。
有没有人经历过类似的事情?