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 мерцает, когда я прокручиваю, а выбор коллекцииView не работает до тех пор, пока цикл for не завершится.

Я не хочу, чтобы приложение отображало ход загрузки и заморозило пользовательский интерфейс. Итак, как увеличить производительность в этом случае?

ответ

1

Что бы сделать, это создать didSet в ваших фотографий массив как это:

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

И я полагаю, что ваш цикл находится в функции, в этом случае я хотел бы создать временный массив и инициализирует его с массивом фотографий, добавьте изображения во временный массив и после того, как цикл назначит временный массив обратно в исходный массив фотографий. Что-то вроде этого - моя идея:

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 будет обновляться только один раз. Приветствия Хорхе Паравичини.

0

Что такое генерация изображения из актива в методе cellForRow и пока изображение генерирует шоу-заполнитель или только серый фон вместо изображения в ячейке.

0

Вы не должны перезагружать полный просмотр коллекции. Вместо этого используйте инкрементные обновления с помощью insertItems().

 Смежные вопросы

  • Нет связанных вопросов^_^