【发布时间】:2011-01-31 12:49:28
【问题描述】:
我在调用UITextField 上的-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 延迟。
有没有人遇到过类似的情况?
【问题讨论】:
-
您是否尝试过在动画中使用键盘的 UIImageView 来人为地创建想要的外观?
-
在装有 iOS 9.3.2 的 iPhone 6s 上,我对键盘的动画方式很满意,但我第一次从 viewDidLoad 调用 becomeFirstResponder 时也观察到了这种延迟。经过一些测试,我发现应用程序启动后的第一个键盘演示会延迟,无论它是如何触发的。并且这种延迟仅在附加调试器时发生。
标签: iphone keyboard modal-dialog first-responder