繁体   English   中英

执行segue时不会在主线程上更新UI

[英]UI is not being updated on the main thread when performing segue

我试图通过执行/准备segue将图像添加到位于另一个视图控制器中的另一个imageView.image,但是当我尝试在bg线程中执行变量然后跳到主线程以对其进行更新时,它不起作用。 但是,如果我删除了调度程序,那么它将起作用。 这是代码:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    SwiftSpinner.show(progress: 0.2, title: "Loading full image, please wait...")
    let vc = segue.destination as! PhotoViewController
    let cell = sender as! UICollectionViewCell
    DispatchQueue.global(qos: .background).async {
        if let indexPath = self.collectionView?.indexPath(for: cell) {
            let url = URL(string: self.images[indexPath.row].rawURL)
            let imageData = NSData(contentsOf: url!)
            let image = UIImage(data: imageData as! Data)
            DispatchQueue.main.async {
                vc.image = image!
                vc.mainImage = image!
                vc.photographerName = self.images[(indexPath.row)].photographerName
                SwiftSpinner.hide()
            }
        }
    }
}

我会推荐KingFisher这样的事情。 它吸收了所有垃圾并将其变成:

 . . .
let cell = sender as! UICollectionViewCell
let url = URL(string: self.images[indexPath.row].rawURL)
vc.imageView.kf.setImage(with: url)
 . . .

但是,是的。 @dlbuckley是正确的。 如果您不做类似KingFisher的事情,请不要在prepareForSegue中做这些事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM