在应用中加载多个已保存的图像会降低速度

时间:2015-06-13 12:55:48

标签: ios swift uiimage xcode6

我正在开发一个应用程序,用户可以在其中保存13个屏幕截图并以缩略图或全屏图像的形式显示在单个视图中。

let fileName:String = self.stickerUsed + ".png"
var arrayPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
var pngFileName = arrayPaths.stringByAppendingPathComponent(fileName)
UIImagePNGRepresentation(screenshot).writeToFile(pngFileName, atomically:true)
NSUserDefaults.standardUserDefaults().setObject(fileName, forKey: self.stickerUsed)
NSUserDefaults.standardUserDefaults().synchronize()

以上是我保存图像的方法,以下是我检索图像的方法。这是第一个屏幕截图的代码:

var defaultName:String = "Sticker1.png"
let path = NSSearchPathForDirectoriesInDomains(
    .DocumentDirectory, .UserDomainMask, true)[0] as NSString
let fileName = NSUserDefaults.standardUserDefaults()
    .stringForKey("Sticker1") ?? defaultName
let imagePath = path.stringByAppendingPathComponent(fileName)
let image = UIImage(contentsOfFile: imagePath )

问题是,随着屏幕截图数量的增加,在单个视图中显示它们会变得非常慢。最终,应用程序在显示“已收到内存警告”后崩溃。我是swift和app开发的新手。在缩略图中显示所有这些图像的正确方法是什么,而不会减慢或崩溃,并以完整的分辨率保存图像。

1 个答案:

答案 0 :(得分:2)

以下代码的问题在于您将以全分辨率显示所有图像:

let image = UIImage(contentsOfFile: imagePath )

最好立即缩小它并在缩略图加载到内存后制作缩略图:

// This line is still the same
let image = UIImage(contentsOfFile: imagePath )

// Scale the image down: 
let newSize = ... // Defined the new size here
                  // should probably be a good idea to match 
                  // the size of the UIImageView
UIGraphicsBeginImageContext(newSize)
image.drawInRect(CGRect(origin: CGPointZero, size: newSize))
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

查看更多:link