如何将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 }) }
谢谢你的帮助 :)