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 개가 넘는 말을 할 때, scroll 할 때 collectionView가 깜빡이고 for 루프가 완료 될 때까지 collectionView 선택이 작동하지 않는다는 것입니다.

앱이 진행 상태를 표시하고 UI를 고정하고 싶지 않습니다. 그렇다면이 경우 어떻게 성능을 향상시킬 수 있습니까? 내가 할 것이 무엇

답변

1

이 같은 사진을 배열에 didSet 만드는 것입니다 :

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

을 그리고 난 당신의 루프가이 경우에 내가 임시 배열을 생성하고 초기화 할 함수에 있다고 가정 photos 배열을 사용하여 이미지를 임시 배열에 추가하고 루프가 끝나면 임시 배열을 원본 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 방법으로 자산에서 이미지를 생성하는 중 및 이미지가 셀에 대신 이미지 표시 자리 표시 자 또는 회색 배경을 생성하는 동안 발생하는 사항은 무엇입니까?

0

전체 컬렉션보기를 다시로드하지 마십시오. 대신 insertItems()으로 증분 업데이트를 사용하십시오.