Ios 用户界面不会立即更新
我的代码如下所示:Ios 用户界面不会立即更新,ios,xcode,multithreading,user-interface,swift,Ios,Xcode,Multithreading,User Interface,Swift,我的代码如下所示: var images = [UIImage]() var isFirstLoop = true for (imageID in self.imageID’s) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT Y_DEFAULT, 0), { let imageToAdd = self.getImageFromUrlByID(imageID) if isF
var images = [UIImage]()
var isFirstLoop = true
for (imageID in self.imageID’s)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT Y_DEFAULT, 0), {
let imageToAdd = self.getImageFromUrlByID(imageID)
if isFirstLoop
{
self.addSubView(imageToAdd)
isFirstLoop = false
}
}
}
我只是不明白为什么在所有任务都完成时,第一个图像被添加为子视图。。。。我尝试将addSubView与dispatch\u async与主线程等任何可能的组合包装起来。。。
图像作为子视图添加需要很长时间。。请帮帮我:)
提前谢谢!!:) 始终从主线程更新UI。仅包括实际更新UI的
调度获取主队列
。如果您的方法getImageFromURLByID()
访问internet(我假设它访问internet),那么您不希望在UI线程上有任何连接,因为它通常会将其冻结
for imageID in imageIDs
{
let imageToAdd = self.getImageFromUrlByID(imageID)
if isFirstLoop {
dispatch_async(dispatch_get_main_queue() {
var imageView = UIImageView(image: imageToAdd)
imageView.frame = someFrame
self.addSubView(imageView)
}
isFirstLoop = false
}
}
你能在主线程上发布你运行addSubview()调用的尝试吗?试试这个dispatch\u async(dispatch\u get\u main\u queue(),^{//your code here});在所有情况下,UIImageView都会添加到UI中,我知道这一点,因为如果我使用打印添加的TapGestureRecognitizer制作,但图像本身在所有操作结束后才会显示,它只是作为透明的UIImageView出现。。我该怎么办?你确定
imageToAdd
是一个UIImageView
而不是UIImage
?在所有情况下,UIImageView都会添加到UI中,我知道这一点,因为如果我使用打印添加的tapGestureRecognizer制作,但图像本身在所有操作结束后才会显示,它只是作为透明的UIImageView出现。。我该怎么办?你在哪里打印“添加”?如果是在日志中,这并不一定意味着您将其添加到了主线程中。在所有情况下,UIImageView都会添加到UI中,我知道这一点,因为如果我使用打印添加的tapGestureRecognizer制作,但图像本身直到一切结束后才会显示,它只是作为透明的UIImageView出现。。我该怎么办?你不能只是添加一个UIImage作为子视图。必须将其放置在UIImageView中。更新后的代码创建了许多UIImageView,但您也可以创建一个UIImageView作为类变量,并使用self.imageView.image=imageToAdd
设置其映像。这不是问题所在。。。上面写的代码是我在注释中写的代码的简化版本,而不是在Xcode中写的,所以我忘了添加UIImageView。。我的代码正在运行,UIImageView被添加到主视图中,但在所有任务完成之前,其中的图像不会显示,即使我使用dispatch\u get\u main\u queue()