gpt4 book ai didi

ios - Swift:UICollectionView 图像加载

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:13 25 4
gpt4 key购买 nike

我有一个问题。由于单元格中图像的大小,我的 UICollectionView 的滚动速度太慢。图像的调整大小功能几乎没有任何变化。由于图像的数量,我无法制作图像的小副本。那么如果我需要像在原生相册应用程序中一样快速加载图像,我该怎么办?我听说过“延迟加载”,但我在 Swift 中找不到任何关于它的教程。

这是我的 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 加载它。所有图像都在设备上的应用程序中。

更新

最后,我实现了 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

最佳答案

这是因为你在主线程中加载图像,最好在后台线程中执行,以使其更流畅更好地在后台线程中解码图像。当你将图像设置为 imageView 时,它会直接设置图像它会解码,所以最好先解码它,然后再将它设置为 imageView.image

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { () -> Void in
var image = UIImage(contentsOfFile: path as String)
UIGraphicsBeginImageContextWithOptions(image!.size, true, 0);
image?.drawAtPoint(CGPointZero)
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), { () -> Void in
cell.imageView.image = image
})

关于ios - Swift:UICollectionView 图像加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32058377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com