UIView需要很长时间才能显示出来

时间:2011-09-09 02:33:08

标签: ios uiview

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

2 个答案:

答案 0 :(得分:4)

很难说没有看到你的代码,但听起来有点像你的应用程序。 iOS可以处理个子视图而不会出现窒息或口吃。并且所有UIView内容都是单线程的 - 事实上,据我所知,所有渲染都发生在同一个运行循环中(CATiledLayer - 支持的视图是我能想到的唯一例外)。因此,即使渲染陷入困境,我也会期待长时间停顿,然后立即显示所有内容。不是你描述的零碎结果。

您是以编程方式还是从笔尖添加视图?一切都在同一个笔尖,或者是自己的一些东西,单独的笔尖?你的UIViewController情况是什么样的?

尝试在显示较晚的内容中弹出一些日志记录。他们的-drawRect:是否真的被称为迟到,或者是否被其他所有人调用,而他们被其他东西遮挡了?尝试启动一个新的,干净的应用程序,其中没有任何内容,并将每个子视图放在那里,看看他们如何孤立地执行?请特别注意您正在使用GCD,线程或preform:AfterDelay:类型的电话。

如果全部失败,请将其作为示例项目发布,以便我们可以实际调试您已完成的任务。

答案 1 :(得分:0)

发生了类似的问题,即使包含标签的视图立即出现,我的标签也没有出现超过10秒钟的时间。原因是因为我是在异步API调用成功结束时这样做的。我不太了解iOS UI的工作原理,但是无论出于何种原因,您都只能在主线程上进行UI更改。

将我的UI /视图相关代码放在以下位置:

DispatchQueue.main.async {
    //View related code
}

立即解决了我的问题。