我正在开发一个应用程序,用户可以在其中保存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开发的新手。在缩略图中显示所有这些图像的正确方法是什么,而不会减慢或崩溃,并以完整的分辨率保存图像。
答案 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。