My UICollectionView извлекает изображения в cellForItemAt
. После того, как я обновляюсь до быстрого 3, некоторые изображения не отображаются, когда я прокручиваю очень быстро. Вот мой код в cellForItemAt
:UICollectionView изображение загрузки не может получить правильную ячейку swift 3
if (imageNotInCache) {
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
if let thumb = imageFromPathAndCacheIt(path) {
DispatchQueue.main.async {
let updateCell = collectionView.cellForItem(at: indexPath) as! MyCustomCell? {
updateCell.imageView.image = thumb
}
}
}
Проблема заключается в том, иногда я получаю updateCell
в ноль даже на экране (вероятно, из-за прокрутки для быстрой).
Я знаю, что мы можем добавить reloadData
после добавления изображения, так же, как: Swift 3: Caching images in a collectionView, но я не хочу вызывать перезагрузку столько раз.
Благодарим вас за этот вопрос. Любые идеи были бы очень оценены!
Спасибо за ваш ответ ! Это может сделать все изображения отображаемыми в правильных ячейках. Но вот теперь прокрутка в первый раз становится отрывистым ... Интересно, есть ли способ получить правильную ячейку для обновления? –
Не беспокойтесь! Хм, не зная больше о том, как работает ваше приложение, я не уверен! Возможно, вам придется использовать инструменты, чтобы точно видеть, что блокирует основной поток во время прокрутки. На всякий случай, если вы этого не сделаете, просто создание 'UIImage' в фоновом потоке не будет декодировать изображение в память; это произойдет лениво, когда изображение появится на экране. Обычно это может вызвать большую задержку прокрутки. На SO есть много вопросов о том, как явно заставить «UIImage» декодировать раньше времени в фоновом режиме: http://stackoverflow.com/questions/3904575/decode-images-in-background-thread – TiM
Существует также много оптимизаций, которые вы можете сделать в целом для повышения производительности прокрутки: https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5#.t8tw7ojhp – TiM