【问题标题】:Swift - Animate Image sequenceSwift - 动画图像序列
【发布时间】: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 (!) 张图像。

标签: swift image animation


【解决方案1】:

加载速度很慢,因为您尝试同时加载 150 张图像。您可以在需要时使用计时器并加载图像。

let imageCount = 150
var frameIndex = 0
var timer: Timer?

func startAnimation() {
    frameIndex = 0
    let deltaTime = 5.0 / Double(imageCount)
    timer = Timer(timeInterval: deltaTime, target: self, selector: #selector(updateFrame), userInfo: nil, repeats: true)
}

func stopAnimation() {
    timer?.invalidate()
    timer = nil
}

@objc func updateFrame(_ timer: Timer) {
    self.animatedImage.image = UIImage(named:"Velkomst_\(frameIndex).png")

    frameIndex += 1
    if frameIndex > imageCount {
        frameIndex = 0
    }
}

【讨论】:

  • 我让它与计时器一起工作,现在动画按预期加载了拾取个体。然而,这给了我另一个问题,应用程序第一次通过动画运行时非常滞后。有没有办法在某种缓存中加载图像?
  • 图片的尺寸是多少?他们每个人的mb是多少?
  • 您可以异步加载图像数据,然后才能开始动画
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多