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:我们需要查看您的代码才能确定。 今天我发现如果UIButton
、UILabel
或其他包含文本的控件,如果其上使用的字体在项目。我从另一个项目中导入了一个自定义控件,Xcode 尝试使用它上面的字体,即使它在我当前的项目中不存在。字体甚至显示在属性检查器中。没有任何类型的警告或错误消息。果然,我换了字体后,性能还不错。【参考方案2】:
有一个类似的问题,即使包含标签的视图立即出现,我的标签也没有出现超过 10 秒。原因是因为我是在异步 API 调用成功的闭包中进行的。我不太熟悉 iOS UI 的工作原理,但无论出于何种原因,您只能在主线程上进行 UI 更改。
将我的 UI/View 相关代码放入:
DispatchQueue.main.async
//View related code
立即解决了我的问题。
【讨论】:
以上是关于UIView 需要很长时间才能显示的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView didSelectItemAtIndexPath 需要很长时间才能触发(2-3 秒)
将视图插入表格 - 视图不需要很长时间才能运行 - 插入需要很长时间