Swift:DispatchQueue.main.async会在一段时间后停止更新UI

时间:2018-01-24 15:29:15

标签: ios swift multithreading user-interface main

我有一个包含UICollectionView的自定义图像选择器。当选择每个单元格时,我希望我的指示器在从其资源中获取图像时显示在单元格中,并在获取图像后最后更新单元格UI。

我设法通过在后台线程中包含后台操作(获取,存储图像)同时更新主线程中的UI来完成所有工作。但是,在选择了8-12个图像后,它会停止显示指示器视图,该视图应该在第一个 DispatchQueue.main.async 调用中完成。这是我的代码:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    ...

    DispatchQueue.main.async {
        cell.showIndicator()

        DispatchQueue.global(qos: .background).async {
            let image = HelperFunctions().getAssetImage(asset: self.images[indexPath.item].asset, thumbnail: false)
            selectedImage = image

            self.selectedImages.append(SelectedImage(image: selectedImage!, index: indexPath.item))

            self.images[indexPath.item].image = selectedImage
            self.images[indexPath.item].page = self.selectedImages.count

            DispatchQueue.main.async {
                cell.imageView.image = selectedImage
                cell.hideIndicator()
                cell.setSelected(page: self.selectedImages.count)
            }
        }
    }
}

0 个答案:

没有答案