0

我想知道某人会如何异步加载多个UI元素。就我而言,我有一个UIViewController,它有一个UISegmentControl。每个细分受众群都有不同的UI要素加载。
例如seg1示出了一个图像,seg2节目和图像和一些文本等在swift中加载多个视图异步

如果我表示UIViewController之前加载所有UI元素然后有一个明显的滞后。所以我想异步加载seg2...n以使界面更加灵敏。

我是否需要通过

DispatchQueue.main.async { 
    // load UI 
} 

对于每个seg我想在后台加载加载一切吗?或者我可以将这些元素加载到另一个线程而不占用主线程?我知道你不应该更新后台线程的用户界面......但如果我使用异步代码,使用主线程仍然会阻止用户界面?

+0

只需调用“DispatchQueue.main.asyn”即可简单地使用该闭包并将其封送到队列的末尾......如果您有长时间的运行/不确定长度操作,您仍将阻止GUI。您将只需等待几个毫秒就可以完成。 是不是有可能采取各种资源是真正的原因的额外时间,并在后台线程处理它们?尝试设置QOS(服务质量为高价值以提供帮助)。 – BonanzaDriver

+0

哦,我明白了。使用分析器查看实际需要的时间并在后台执行这些操作? – uti0mnia

回答

0

您无法在后台线程上进行UI更改。几乎所有的UIKit调用都必须在主线程上进行。所以你可能不走运。

而应该做的是在后台线程上花费大量时间进行数字计算(例如下载和解析数据),然后使用DispatchQueue.main.async()将数据安装到主线程的视图中一旦耗时的工作完成。

如果是引入延迟的UI设置,并且无法加快速度,那么您可能会失败。