取消隐藏视图时 becomeFirstResponder 会减慢应用程序的速度
Posted
技术标签:
【中文标题】取消隐藏视图时 becomeFirstResponder 会减慢应用程序的速度【英文标题】:becomeFirstResponder slows down app when unhiding view 【发布时间】:2012-09-13 23:07:35 【问题描述】:这是对该问题的后续跟进:becomeFirstResponder slows down app
我遇到了与该海报相同的问题,即调用 becomeFirstResponder 似乎会减慢我的应用程序的速度(它可能会挂起 1-2 秒)。但是,虽然他们将其与显示警报一起调用,但我只是试图取消隐藏隐藏视图并让它与某个字段一起显示为第一响应者。比如:
[self.dialogView setHidden:NO];
[self.dialogText becomeFirstResponder];
dialogView 有一个包含 dialogText(我试图设置为第一响应者的 UITextField)和其他一些项目的层次结构。
这种缓慢仅在第一次执行此代码时表现出来,即我们第一次尝试打开此对话框时。在随后的尝试中,没有明显的缓慢(我认为这是因为 dialogText 在那时已经是第一响应者 - 我没有在任何地方使用 resignFirstResponder ?)。
编辑:这里有一些额外的上下文代码,但不确定它是否真的会更清楚。请注意,我现在正在动画显示此对话框视图的取消隐藏,但行为没有什么不同。我也已经将 becomeFirstResponder 调用移到完成块中(未反映在此处的代码中),这样至少对话框的出现不会延迟,但是在对话框出现和键盘出现之间仍然存在延迟。
- (IBAction)showEditDialog:(id)sender
[UIView animateWithDuration:0.3f animations:^()
self.maskView.alpha = 0.8;
self.editDialogView.alpha = 1.0;
completion:^(BOOL finished)
if (finished)
];
[self.editDialogText becomeFirstResponder];
【问题讨论】:
我在上面添加了更多上下文,但不确定它会添加多少。如果您还有什么想看的,请告诉我 根据你的代码,我可以说在你的动画完成后它会显示键盘,评论你的动画代码然后尝试。告诉我,键盘还需要很多时间吗? 尽量减少你的动画时间,看看它有什么不同。 就像我说的,在我制作动画外观之前,同样的问题正在发生。动画与它无关。 【参考方案1】:首先,你在做视图切换吗?(例如 view1(hide)->view2(unhide))
如果您的 dialogText(我猜是文本字段?)在不同的视图上,我建议您这样做:
[self.view bringSubviewToFront:view2];
第一
如果不查看您的视图是如何分配的以及您的 textView 或 textField 所在的位置,很难猜测是什么减慢了它。
【讨论】:
视图层次结构是:view->editDialogView(view)->editDialogText(texfield)。所以没有视图切换,主视图总是可见的,我们只是在它上面隐藏/取消隐藏editDialogView。我只是给了 [self.view bringSubviewToFront:self.editDialogView] 一个镜头,看起来它可以解决问题,会做更多的测试来确认和报告。 kk。让我知道是否是问题所在。顺便说一句,我喜欢 G.Moore 这个名字,让我想起了 Gary Moore。大声笑 所以我有点为时过早地考虑将bringSubviewToFront 修复它。它实际上似乎没有任何效果(我想我已经习惯了将 becomeFirstResponder 放在取消隐藏动画的完成块中的较长延迟)。还有其他想法吗? 嘿 phil88530,还有其他想法吗? 嘿,抱歉几天没登录。我意识到你有一个 0.3f 秒的 alpha(透明)动画,我想知道这是否真的是原因?我个人会使用 [NSTimer scheduledTimerWithTimeInterval:.....] 来做到这一点?如果你想尝试一下?只是为了我的兴趣,您能告诉我您使用的是哪款 iPhone 吗?(哪个模拟器或 iPhone,您设置的型号和 ios 版本是什么?)以上是关于取消隐藏视图时 becomeFirstResponder 会减慢应用程序的速度的主要内容,如果未能解决你的问题,请参考以下文章
取消隐藏视图时 becomeFirstResponder 会减慢应用程序的速度