gpt4 book ai didi

iphone - 在模态视图 Controller 中调用 comeFirstResponder 时出现键盘动画问题

转载 作者:行者123 更新时间:2023-12-03 18:36:21 26 4
gpt4 key购买 nike

在以模态方式呈现的 View Controller 包含的 UITextField 上调用 -becomeFirstResponder 时遇到了一些问题。我在模态视图 Controller 的 -viewDidLoad 方法中调用此方法,以便立即显示键盘。我期望键盘和模态视图 Controller 同时从屏幕底部开始产生动画。但是,我观察到的是以下内容:

  1. 在父 View Controller 上单击调用 -presentModalViewController:animated: 方法的按钮与 subview Controller 开始以模态方式设置动画之间存在约 0.2 秒的 UI 延迟。
  2. 一旦模态视图 Controller 的动画开始,键盘就会立即呈现,完全没有动画。
  3. 一旦模态视图 Controller 的动画完成,其他一切似乎都会顺利进行。
  4. 关闭模态视图 Controller 会使其在屏幕外平滑地呈现动画(巧合的是,还有键盘)。
  5. 第一次点击显示模态视图 Controller 的按钮会产生相同的模式,只是没有约 0.2 秒的 UI 延迟。

就好像键盘的动画和模态视图 Controller 的动画同时竞争一些较低级别的核心动画资源,但我不明白为什么会发生这种情况。似乎进一步证实了这种预感的是,如果我不要求 UITextField 成为第一响应者(即,如果我不要求键盘出现),那么绝对没有 UI滞后,模态视图 Controller 立即产生动画。

有趣的是,如果我执行类似 [self.textField PerformSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001]; 的操作,那么键盘的动画几乎与模态视图 Controller 的动画——在 iPhone 模拟器上运行时,很难判断它们不是同时进行动画处理。然而,当在实际设备上运行时,很容易注意到,直到模态视图 Controller 出现之后键盘才出现。但重要的是,不再有 UI 延迟。

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

最佳答案

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

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

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

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

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

关于iphone - 在模态视图 Controller 中调用 comeFirstResponder 时出现键盘动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com