如何在 iOS 中更改动画 gif 图像的不透明度

How to change opacity of animated gif images in iOS

相关代码如下。我希望每个图像在出现在整个动画循环中时都具有淡入效果。当 运行 这段代码时,gif 动画效果起作用,但不透明度更改代码不起作用。任何帮助将不胜感激。谢谢!

import UIKit

class View1: UIViewController {
    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var imagesNames = ["ALA0.jpeg", "ALA1.jpeg", "ALA2.png", "ALA3.png", "ALA4.png", "ALA5.png", "ALA6.png", "ALA7.png", "ALA8.png", "ALA9.png", "ALA10.png"]
        var images = [UIImage]()

        for i in 0..<imagesNames.count{
            images.append(UIImage(named: imagesNames[i])!)
            imageView.alpha = 0
            UIImageView.animate(withDuration: 1.0) {
                self.imageView.alpha = 1
            }
        }

        imageView.animationImages = images
        imageView.animationDuration = 6.0

        self.imageView.startAnimating()
    }
}

试试下面的代码:已更新

    for i in 0..<imagesNames.count{

        images.append(UIImage(named: imagesNames[i])!)
        imageView.alpha = 0
        UIImageView.animate(withDuration: 0.9, delay: 0, options: [UIViewAnimationOptions.curveEaseInOut,.repeat], animations: { 
             self.imageView.alpha = 1
            }, completion: nil)

    }

       imageView.animationImages = images
       imageView.animationDuration = 5 // I am using 5 images to perform animation

注意:从上面code.You会得到一个逐帧的华丽效果,你必须玩动画持续时间和总动画持续时间来同步效果.

问题是您的动画在 for 循环中。

你有 11 张图片,所以执行动画的 4 行,从 imageView.alpha = 0 开始执行了 11 次,这会混淆动画系统。

您应该在设置动画图像或持续时间的同一位置将 alpha 设置为 0。

至于实际的动画,你应该把它放在viewDidAppear:中。你不希望你的动画在视图出现在屏幕上之前开始,否则它看起来好像没有从头开始。

最后,实例化图像数组的更好方法是

let images = imageNames.flatMap { UIImage(named: [=13=]) }

即使是Swiftier,也无需声明所有名称(此外,UIImage(named:)会为您找到图像扩展名,无需添加。)

let images = (0..<11).flatMap { UIImage(named: "ALA\([=15=])") }