У меня проблема. Прокрутка моего UICollectionView слишком отсталая из-за размера изображений, которые находятся в ячейках. Функция изменения размера изображения почти ничего не меняет. И у меня нет возможности сделать небольшие копии изображений из-за номера изображений. Итак, что мне делать, если мне нужно быстро загрузить изображения, как в собственном приложении Album? Я слышал о «ленивой загрузке», но я не могу найти в Swift учебник.Swift: UICollectionView images loading
Вот мой cellForItemAtIndexPath:
let cell : MyCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! MyCollectionViewCell
let painting = objs[indexPath.row]
let name = (painting.valueForKey("imageName") as? String)!
let path = NSBundle.mainBundle().bundlePath.stringByAppendingString("/\(name)") as NSString
cell.imageView.image = UIImage(contentsOfFile: path as String)
cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.mainScreen().scale
return cell
Я был бы рад, если бы вы помочь мне решить эту проблему! PS Приложение не загружает его с WEB. Все изображения находятся в приложении на устройстве.
UPDATE
Наконец, я осуществил SDWebImage. Это лучшее решение, которое я нашел. Вот мой cellForRowAtIndexPath:
let cell : MyCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! MyCollectionViewCell
let block: SDWebImageCompletionBlock! = {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType, imageURL: NSURL!) -> Void in
// println(self)
}
let path = NSBundle.mainBundle().bundlePath.stringByAppendingString("/\(images[indexPath.row])") as NSString
let url = NSURL.fileURLWithPath(path as String)
println(url)
cell.imageView.sd_setImageWithURL(url, placeholderImage: UIImage(named: "placeholder"), completed: block)
cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.mainScreen().scale
return cell
Это почти решило мою проблему, свиток коллекции просматривается быстрее, но все еще немного лаги. Я думаю, причина в том, что слишком большие изображения. Любые идеи? –
Для этого вам нужно также декодировать изображение на фоновом потоке –
Проверить мой ответ здесь http://stackoverflow.com/a/31959595/718721 –