代码之家  ›  专栏  ›  技术社区  ›  matt

iOS 11在UIImageView中显示动画gif

  •  15
  • matt  · 技术社区  · 8 年前

    我以为iOS 11最终会为动画GIF带来原生支持?但我试过了,没有看到任何动画:

    let im = UIImage(named:"wireframe.gif")!
    let iv = UIImageView(image:im)
    iv.animationImages = [im] // didn't help
    iv.frame.origin = CGPoint(0,100)
    iv.frame.size = im.size
    self.view.addSubview(iv)
    delay(2) {
        iv.startAnimating() // nope
    }
    

    2 回复  |  直到 8 年前
        1
  •  18
  •   matt    8 年前

    iOS 11确实带来了对动画GIF的原生理解,但令人恼火的是,这种理解并没有内置到UIImageView中。这仍然取决于

    https://developer.apple.com/library/content/samplecode/UsingPhotosFramework/Listings/Shared_AnimatedImage_swift.html

    该代码实现了一个AnimatedImage类,它本质上是从原始动画gif中提取的CGImages的集合。因此,使用该类,我们可以在UIImageView中显示动画gif并设置动画,如下所示:

    let url = Bundle.main.url(forResource: "wireframe", withExtension: "gif")!
    let anim = AnimatedImage(url: url)!
    var arr = [CGImage]()
    for ix in 0..<anim.frameCount {
        arr.append(anim.imageAtIndex(index: ix)!)
    }
    var arr2 = arr.map {UIImage(cgImage:$0)}
    let iv = UIImageView()
    iv.animationImages = arr2
    iv.animationDuration = anim.duration
    iv.frame.origin = CGPoint(0,100)
    iv.frame.size = arr2[0].size
    self.view.addSubview(iv)
    delay(2) {
        iv.startAnimating()
    }
    
        2
  •  1
  •   Ian Wilkinson    8 年前

    我推荐Flipboard的FLAnimatedImage,它可以正确处理GIF。 https://github.com/Flipboard/FLAnimatedImage .