UIImageView中的iOS 11动画gif显示

我认为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 } 

这应该怎么样?

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.. 

不幸的是,GIF的帧间定时可能在帧之间有所不同,因此使用ImageIO加载帧然后将它们设置为UIImageView上的animatedImages的答案需要正确提取时序并将其考虑在内。

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