0

我有一個UICollectionView,我從照片庫加載照片的集合。重新加載UICollectionView的最佳方式

for asset: PHAsset in self.photoAssets! { 
          SFSImageManger.imageFromAsset(asset, isOriginal: false, toSize: CGSize(width: 150, height: 150), resultHandler: { (image: UIImage?) in 
           guard image != nil else { return } 
           dispatch_async(dispatch_get_main_queue(), { 
            self.photos.append(image!) 
            self.albumCollection.reloadData() 
           }) 
          }) 
         } 

這是我如何加載照片。問題是當我有很多照片,比如說超過500,當我滾動collectionView時會閃爍,並且collectionView選擇在for循環完成之前不起作用。

我不希望應用程序顯示加載進度並凍結UI。那麼,在這種情況下如何提高性能?

回答

1

我會做什麼是創造這樣的照片中的數組didSet:

var photos = [UIImages]() { 
    didSet { 
     albumCollection.reloadData() 
    { 
} 

而且我想,你的循環是一個函數,在這種情況下,我會創建一個臨時數組並初始化它使用photos數組,將圖像追加到臨時數組,並在循環之後將臨時數組分配回原始照片數組。像這樣的東西是我的想法:

var tempPhotos = photos 
    for asset: PHAsset in self.photoAssets! { 
          SFSImageManger.imageFromAsset(asset, isOriginal: false, toSize: CGSize(width: 150, height: 150), resultHandler: { (image: UIImage?) in 
           guard image != nil else { return } 
           dispatch_async(dispatch_get_main_queue(), { 
            self.tempPhotos.append(image!) 
           }) 
          }) 
         } 
    photos = tempPhotos 

這樣,collectionView將只更新一次。 問候Jorge Paravicini。

0

什麼是從cellForRow方法的資產生成圖像,而圖像正在生成顯示佔位符或只是灰色的背景,而不是在單元格中的圖像。