在模态视图控制器中调用becomeFirstResponder时的键盘动画问题

CIF*_*ter 8 iphone keyboard modal-dialog first-responder

我一直有一些问题,调用-becomeFirstResponder一个UITextField以模态方式呈现的视图控制器的包含.我在模态视图控制器的-viewDidLoad方法中调用此方法,以便立即显示键盘.我期望键盘和模态视图控制器同时从屏幕底部向上动画.但是,我正在观察的是以下内容:

  1. 单击在-presentModalViewController:animated:父视图控制器上调用方法的按钮与子视图控制器开始以模态方式动画之间存在约0.2秒的UI延迟.
  2. 一旦模态视图控制器的动画开始,键盘立即显示完全没有动画.
  3. 一旦模态视图控制器的动画完成,其他一切似乎都能顺利运行.
  4. 关闭模态视图控制器会导致它在屏幕外平滑动画(与键盘一起,巧合).
  5. 在第一次之后的任何时候单击显示模态视图控制器的按钮会产生相同的模式,除了没有~0.2秒的UI延迟.

就像键盘的动画和模态视图控制器的动画同时竞争某些较低级别的Core Animation资源一样,但我不明白为什么会发生这种情况.如果我不要求UITextField成为第一个响应者(即,如果我不要求键盘呈现自己),那么似乎进一步证实了这种预感,那么绝对没有UI延迟,并且模态视图控制器动画即刻.

有趣的是,如果我做类似的事情[self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001];,键盘的动画几乎与模态视图控制器的动画同时发生 - 很难说它们在iPhone上运行时不会同时被动画化模拟器.但是,当在实际设备上运行时,很容易注意到键盘在出现模态视图控制器之后才会出现.但重要的是,没有更多的UI延迟.

有没有人经历过类似的事情?

Tec*_*Zen 4

我相信您遇到问题是因为您正在有效地堆叠动画。键盘视图包含在模式视图中。键盘视图试图在视图的上下文中为其幻灯片过渡设置动画,该视图本身也为过渡幻灯片设置动画。键盘动画试图击中移动目标。

暂停很可能是键盘转换动画的运行时间。我相当确定键盘动画会从其他动画中获取优先级,以便它可以驱动 UI 的重新排列,例如滚动表格,以便键盘不会覆盖已编辑的表格行。在任何情况下,键盘动画都发生在超级视图的上下文中。在模态视图的情况下尤其如此。

因此,键盘视图会自行滑入动画,但由于超级视图实际上还不可见,因此您什么也看不到。当超级视图滑入时,键盘已经存在,因为它的动画在超级视图开始其动画之前完成。

简而言之,我认为你无法真正完成你想做的事情。相反,我认为您必须首先对模式视图过渡进行动画处理,然后运行键盘动画,否则您将不得不接受让键盘立即可见。

我认为卷层云上面的建议是一个很好的建议。使用将随模态视图滑入的键盘图像,然后立即将其与真实键盘交换。