如何将UIImage转换为Swift 3.0中的imageWithContentsOfFile

我已经创build了一个PNG图像序列的animation通过UIImage对象(约30 PNG图像来创buildanimation – 每100KB)

但是,在查看Apple的文档之后,通过UIImage对象caching图像不是最好的select(留下的内存足够大):

https://developer.apple.com/documentation/uikit/uiimage#//apple_ref/occ/clm/UIImage/imageNamed :

在查看了其他一些SOpost后,最好的方法是创build一个新的组文件夹(“animation”)并将PNG存储在新文件夹中,并通过contentsOfFile:调用它们contentsOfFile:

我已经完成了上述所有,将图像存储在一个新的组,并更新我的代码 – 但我仍然失去了一些东西(抛出一个致命的错误:意外地发现零,而解包一个可选值)

这是我目前的代码(使用UIImage):

 func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{ var imageArray: [UIImage] = [] for imageCount in 0..<total { let imageName = "\(imagePrefix)-\(imageCount).png" let image = UIImage(named: imageName)! imageArray.append(image) } return imageArray } 

这里是我更新的代码(使用contentsOfFile):

 func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{ var imageArray: [UIImage] = [] for imageCount in 0..<total { let imageName = "\(imagePrefix)-\(imageCount)" // updated //let image = UIImage(named: imageName)! let bundlePath = Bundle.main.path(forResource: imageName, ofType: "png") let image = UIImage(contentsOfFile: bundlePath!) imageArray.append(image!) } return imageArray } 

这是我的代码的其余部分:

我定义了我的ViewController的实例variables:

 var animation1: [UIImage] = [] var animation2: [UIImage] = [] var animation3: [UIImage] = [] 

然后我为每个animation创build一个animation数组:

 func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{ var imageArray: [UIImage] = [] for imageCount in 0..<total { let imageName = "\(imagePrefix)-\(imageCount)" // updated let image = UIImage(named: imageName)! imageArray.append(image) } return imageArray } 

然后我设置animation值:

 func animate(imageView: UIImageView, images: [UIImage]){ imageView.animationImages = images imageView.animationDuration = 1.5 imageView.animationRepeatCount = 1 imageView.startAnimating() } animation1 = createImageArray(total: 28, imagePrefix: "ImageSet1") animation2 = createImageArray(total: 53, imagePrefix: "ImageSet2") animation3 = createImageArray(total: 25, imagePrefix: "ImageSet3") 

最后调用animation函数

 func showAnimation() { UIView.animate(withDuration: 1, animations: { animate(imageView: self.animationView, images: self.animation1) }, completion: { (true) in }) } 

谢谢你的帮助 :)