2016-10-30 40 views
0

下面的相关代码。我希望每个图像在出现在整个动画周期中时都具有淡入效果。运行此代码时,gif动画会影响工作,但不透明度更改的代码不会。任何帮助将不胜感激。谢谢!如何在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() 
    } 
} 
+0

对不起我的坏...让我看看...谢谢你让我知道...谢谢 – Joe

+0

代码updated.let我知道代码适用于周到,谢谢 – Joe

回答

0

试试下面的代码:更新

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会得到一个华丽的效果帧与帧和你有动画的持续时间和总播放动画持续时间来同步效果。

+0

谢谢!它的作品,它很漂亮! – Phillip

0

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

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

您应该在相同的地方将alpha设置为0,而不是设置动画图像或持续时间。

至于实际的动画,你应该把它放在viewDidAppear:。你不希望你的动画直到视图在屏幕上才开始,否则它可能看起来并不是从一开始就开始。

最后,实例化图像阵列的一个更好的办法是

let images = imageNames.flatMap { UIImage(named: $0) }

即使Swiftier,无需声明所有的名字(另外,UIImage(named:)会发现你的形象推广,没有必要添加它。)

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

+0

谢谢你指出。此外,知道您不必手动插入每个图像的名称也非常有用。 – Phillip