viewDidAppear() 中的图像动画有问题,有什么建议吗?

problem with image animation in viewDidAppear(), any advice?

我正在尝试创建一个滚动浏览一系列图像的动画。以下代码没有任何动画,屏幕上只显示该系列的最后一张图片。我该如何修复这个动画?

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        imageSelection(score: 50)
    }
func imageSelection(score: Int) {
        var myScore = score
        if score < 10 {
            myScore = 1
        }
        else if score < 20 && score > 10 {
            myScore = 2
        }
        else if score < 30 && score > 20 {
            myScore = 3
        }
        else if score < 40 && score > 30 {
            myScore = 4
        }
        else if score < 50 && score > 40 {
            myScore = 5
        }
        else if score == 50 {
            myScore = 6
        }
        for i in 1...myScore{
            UIView.animate(withDuration: 0.5) {
                self.cookieImage.image = UIImage(named: "rewardsCookie\(i)")
                self.view.layoutIfNeeded()
            }
        }
    }

您是否正在尝试制作 "flip book" 在一系列图像之间翻转的动画?最简单的方法是使用 UIImageView 动画。有关详细信息,请参阅 Xcode 中的 UIImageView class 参考(请参阅标题为 "Animating a Sequence of Images" 的部分。

正如 Matt 所说,您没有为任何可设置动画的属性设置动画。您可以通过使用图层动画来实现您想要的效果。用以下代码替换 for 循环。

    var images = [CGImage]()
    for i in 1...myScore{
        images.append(UIImage(named: "rewardsCookie\(i)")!.cgImage!)
    }
    let animation = CAKeyframeAnimation(keyPath: "contents")
    animation.values = images
    let delay = 3.0 // in case you need to delay your animation
    animation.duration = 5.0 // change to the total duration (ex: 0.5 * myScore)
    animation.beginTime = CACurrentMediaTime() + delay
    self.cookieImage.layer.add(animation, forKey: nil)

请注意,对于图层动画,您实际上看到的不是 UIImageView,而是它的缓存版本。一旦动画完成并且原始层再次显示,它就会从屏幕上移除。因此,您将看到动画开始前在 cookieImageView 上可见的图像。为了持久化最后一张图片,在上面的代码后添加下面一行

    self.cookieImage.image = UIImage(named: "rewardsCookie\(myScore)")

有关详细信息,请查看 Apple's Documentation