UIView 需要很长时间才能显示

Posted

技术标签:

【中文标题】UIView 需要很长时间才能显示【英文标题】:UIView takes long time to display 【发布时间】:2011-09-09 02:33:07 【问题描述】:

我在根 UIView 中显示了很多 UIView。 (我知道这不是一个好习惯)。子视图包括 UIImageViews、UILabels 和使用 Quartz 绘制一些线条的自定义 UIViews。生成所有视图后,我将根视图添加到 UISCrollView 以显示它们。问题是,所有的图像都是即时显示的,但是标签中的文字和我在 drawRect 方法中绘制的线条会需要很长时间才能显示出来。如果我缩放滚动视图,它们都会立即显示。有什么问题?谢谢。

【问题讨论】:

【参考方案1】:

没有看到您的代码很难说,但听起来您的应用程序出了点问题。 ios 可以处理 大量 数量的子视图而不会出现阻塞或卡顿。所有UIView 的东西都是单线程的——事实上,据我所知,所有渲染都发生在同一个运行循环中(CATiledLayer-支持的视图是我能想到的唯一例外)。因此,即使渲染陷入困境,我也希望有很长时间的停顿,然后所有内容都会立即显示。不是你描述的零碎的结果。

您是以编程方式添加视图,还是从 nib 添加视图?是所有东西都在同一个笔尖,还是有些东西在自己的单独笔尖?您的UIViewController 情况如何?

尝试在显示较晚的内容中弹出一些日志记录。他们的-drawRect:s 真的被叫晚了,还是他们被其他所有东西都叫了,他们被其他东西遮住了?尝试启动一个新的、干净的应用程序,其中没有任何内容,然后将您的每个子视图放在那里,看看它们是如何单独执行的?请特别注意使用 GCD、线程或preform:AfterDelay: 类型调用的任何地方。

如果一切都失败了,请将其作为示例项目发布,以便我们实际调试您所做的工作。

【讨论】:

... 并 +1 多个建议。但对 Eric Wong:我们需要查看您的代码才能确定。 今天我发现如果UIButtonUILabel 或其他包含文本的控件,如果其上使用的字体在项目。我从另一个项目中导入了一个自定义控件,Xcode 尝试使用它上面的字体,即使它在我当前的项目中不存在。字体甚至显示在属性检查器中。没有任何类型的警告或错误消息。果然,我换了字体后,性能还不错。【参考方案2】:

有一个类似的问题,即使包含标签的视图立即出现,我的标签也没有出现超过 10 秒。原因是因为我是在异步 API 调用成功的闭包中进行的。我不太熟悉 iOS UI 的工作原理,但无论出于何种原因,您只能在主线程上进行 UI 更改。

将我的 UI/View 相关代码放入:

DispatchQueue.main.async 
    //View related code

立即解决了我的问题。

【讨论】:

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

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

IconData 需要很长时间才能加载并且不显示图标

从图像 URL 加载图像需要很长时间才能显示

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

Google Maps setMyLocationEnabled(true) 需要很长时间才能显示当前位置

隐藏 UIView 需要很长时间