【发布时间】:2018-03-31 01:36:43
【问题描述】:
我有一个想要在 Swift 中制作动画的图像列表。我试图找到最好的方法来做到这一点 - 但我仍然有一些问题。
我现在为图像列表制作动画的方式是:
var animatedImage = UIImageView()
var velkomstImgList = [UIImage]()
override func viewDidAppear(_ animated: Bool) {
animatedImage.frame = CGRect(x: 0, y: 0, width: self.scrollView.frame.width, height: 200)
animatedImage.contentMode = .scaleAspectFit
scrollView.addSubview(animatedImage)
animateVelkomst()
}
func animateVelkomst() {
for i in 0...150 {
velkomstImgList.append(UIImage(named:"Velkomst_\(i).png")!)
if i == 150 {
self.animatedImage.animationImages = self.velkomstImgList
self.animatedImage.animationDuration = 5.0
self.animatedImage.startAnimating()
}
}
}
它工作正常,动画按预期显示。但是一开始的for 循环需要很长时间,我认为这不是显示动画的正确方式。关于我应该如何为图像序列设置动画的任何建议?
【问题讨论】:
-
UIImage(named:)很慢。见stackoverflow.com/a/49471068/1271826。 -
@Rob 这取决于图像添加到应用程序的方式。如果将它们捆绑为单独的文件,
init(contentsOfFile:)可能会更快,但最好将它们添加到xcassets文件夹中,这将在编译时将它们处理成纹理表。 -
@EmilioPelaez - 同意,如果他们在
xcassets中,contentsOfFile方法将不起作用。但是,尽管如此,UIImage(named:)足够慢,以至于它可能不够快,无法及时快速加载 150 (!) 张图像。