UIImageView中的iOS 11动画gif显示

mat*_*att 11 animation animated-gif uiimageview ios ios11

我认为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
}
Run Code Online (Sandbox Code Playgroud)

这应该怎么样?

mat*_*att 15

iOS 11确实带来了对GIF动画的原生理解,但是这种理解并不是内置于UIImageView中.它仍高达到GIF动画转换成UIImages的序列.Apple现在提供了ImageIO框架的示例代码:

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()
}
Run Code Online (Sandbox Code Playgroud)

  • 该链接是404。是否已删除功能? (2认同)
  • 网址再次损坏 (2认同)
  • @ShaneNeuville是的,我也注意到了.苹果似乎无法对此作出决定.他们让代码摆脱困境 - 从而鼓励我们这样做 - 现在他们已经尝试重新填充它.基本上看起来他们似乎不希望我们显示GIF动画. (2认同)