隐藏 UIView 需要很长时间

Posted

技术标签:

【中文标题】隐藏 UIView 需要很长时间【英文标题】:Hiding an UIView takes a long time 【发布时间】:2018-03-13 10:16:59 【问题描述】:

美好的一天...!

我想通过按下其中的按钮来简单地隐藏 UIView(称为“secondView”)。 我遇到的问题是,当我按下按钮时,执行该方法并隐藏其超级视图需要很长时间(大约 20 秒),而我只是在 ios 11.2 上运行的 iphone 模拟器上看到了这个问题。我已经在 iOS 9.0 iphone 模拟器和 iphone 5 iOS 10.3 真实设备上进行了测试。不幸的是,我没有安装任何安装了 iOS 11.2 的真实设备进行测试。

这是我用来隐藏 UIView 的方法:

-(IBAction)hideSecondView:(id)sender
    secondView.hidden = YES;

根据Showing hidden view really slow 的主题和@Duncan C 提供的答案,我将代码更改如下:

-(IBAction)hideSecondView:(id)sender
    dispatch_async(dispatch_get_main_queue(), ^
        secondView.hidden = YES;
    );

但问题仍然存在:(

任何帮助将不胜感激。

更新1:

作为the snippet enhanced by @drct,我检查了除main 之外的线程上是否有任何UIKit 访问。但没有抓到!

我有一个简单的测试项目,Main thread checker 表明应用程序没有产生其他胎面。我在 secondView 的隐藏延迟时间内暂停了执行。

【问题讨论】:

您只想隐藏数据或重新单击您想要返回该视图? 您可以尝试将视图的 alpha 设置为 0。将 alpha 设置为 0 会得到与 hide 相同的结果并使其不可见。 @RealmOfFire 我想要返回视图。 比 sethidden:NO @Ajaysaini 是的,但我在该视图中有另一个对象,如按钮等,在这种情况下,我应该禁用所有这些对象,这会得到很多代码! 【参考方案1】:

@Duncan C 写了一个很好的答案来描述您的问题。

您可能有其他代码尝试从后台线程执行 UIKit 调用,但您并不知道。

你能检查一下你没有其他 UIKit 调用吗?

【讨论】:

感谢您的回答!考虑到我进行了检查的知识水平,更新中添加了更多解释。还有其他检查吗?

以上是关于隐藏 UIView 需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章

调用 UIView animateWithDuration 后,关键帧动画需要很长时间才能启动

当 chromecast 关机时,chromecast 需要很长时间才能隐藏 chromecat 按钮

UICollectionView didSelectItemAtIndexPath 需要很长时间才能触发(2-3 秒)

将视图插入表格 - 视图不需要很长时间才能运行 - 插入需要很长时间

ExportAsFixedFormat 需要很长时间[关闭]

解释计划需要很长时间