Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用户界面不会立即更新_Ios_Xcode_Multithreading_User Interface_Swift - Fatal编程技术网

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()