изображение не отображается в UIImageView, когда оно установлено, даже если оно вызывается в главном потоке - PullRequest
0 голосов
/ 23 марта 2019

У меня есть UICollectionView с UIImageView в качестве заголовка (с именем AddPhotoHeader).Фон имеет серый цвет, но как только изображение выбрано в следующем контроллере (с именем PhotoSelectorController), оно должно вернуться к исходному UICollectionView с изображением в UIImageView.

Это в AddPhotoHeader:

var selectedImage: UIImage? {
    didSet {
        DispatchQueue.main.async {
            self.imageView.image = (self.selectedImage)!
            print("This is the selectedImage:", (self.selectedImage)!)
        }
        imageView.backgroundColor = .white
    }
}


let imageView: UIImageView = {
    let iv = UIImageView()
    iv.backgroundColor = UIColor.rgb(red: 234, green: 246, blue: 246)
    iv.contentMode = .scaleAspectFill
    iv.clipsToBounds = true
    return iv
}()

В PhotoSelectorController, вот где фотографии выбираются:

fileprivate func fetchPhotos() {
    let allPhotos = PHAsset.fetchAssets(with: .image, options: assetsFetchOptions())

    DispatchQueue.global(qos: .background).async {
        allPhotos.enumerateObjects({ (asset, count, stop) in
            let imageManager = PHImageManager.default()
            let targetSize = CGSize(width: 200, height: 200)
            let options = PHImageRequestOptions()
            options.isSynchronous = true
            imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: options, resultHandler: { (image, info) in

                if let image = image {
                    self.images.append(image)
                    self.assets.append(asset)

                    if self.selectedImage == nil {
                        self.selectedImage = image
                    }
                }

                if count == allPhotos.count - 1 {
                    DispatchQueue.main.async {
                        self.collectionView?.reloadData()
                    }
                }

            })

        })
    }
}

После того, как пользователь выбирает фотографию и нажимает «Далее», эта функция вызываетсяпоместить изображение в UIImageView AddPhotoHeader

@objc func handleNext() {
    let addPhotoHeader = AddPhotoHeader()
    addPhotoHeader.selectedImage = header?.photoImageView.image
    navigationController?.popViewController(animated: true)
}

И оператор печати в selectedImage распечатывает:

This is the selectedImage: <UIImage: 0x6000028510a0>, {485, 482}

Но он просто остается серым прямоугольникомв UIImageView AddPhotoHeader

нет изображения, я чувствую, что здесь упущен очевидный шаг, но я просто не смог понять это.Надеюсь, вы можете помочь мне!Спасибо!

...