我UICollectionView是獲取圖像cellForItemAt
。升級到swift 3後,當我滾動速度非常快時,某些圖像不顯示。這是我在cellForItemAt
代碼:UICollectionView負荷的形象不能得到正確的細胞迅速的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,但我不想多次調用reload。
感謝您有興趣在這一問題。任何想法將非常感激!
謝謝您的回答!這可以使所有圖像顯示在正確的單元格中。但事情現在第一次滾動變成了生澀的......我想知道是否有辦法獲得更新的正確單元格? –
不用擔心!嗯,不知道更多關於你的應用程序如何工作,我不知道!您可能需要使用工具來查看在滾動時阻塞主線程的確切內容。以防萬一你不這樣做,只需在後臺線程上創建一個'UIImage'就不會將圖像解碼到內存中;當圖像視圖出現在屏幕上時,這會發生懶惰。這通常會導致大多數滾動視圖滯後。有很多關於如何明確強制'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