iOS默认是不支持播放GIF图片的,但是系统也没有禁止播放它,该有的API还是有的,下面就 来一发吧!
一定要导入ImageIO 这个 库
//首先你得有个imageview吧~~~~~
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// 1️⃣.在本地加载Gif图片(不要放在imageassert中,其实也放不进去~~`), 并且转成Data类型(这里不再写swift语法,guard 做一下校验...)
guard let path = Bundle.main.path(forResource: "demo.gif", ofType: nil) else { return }
guard let data = NSData(contentsOfFile: path) else { return }
// 2️⃣. 将data转成CGImageSource对象,返回CGImageSource
guard let imageSource = CGImageSourceCreateWithData(data, nil) else { return }
//3️⃣通过CGImageSource可以拿到分解了多少张图片(看成是一帧一帧的)
let imageCount = CGImageSourceGetCount(imageSource)
// 4️⃣遍历所有的图片
var images = [UIImage]()
var totalDuration : TimeInterval = 0
for i in 0..<imageCount {
// 3️⃣.1️⃣取出图片
guard let cgImage = CGImageSourceCreateImageAtIndex(imageSource, i, nil) else { continue }
let image = UIImage(cgImage: cgImage)
if i == 0 {
imageView.image = image
}
//3️⃣.2️⃣加入到一个images的数组中
images.append(image)
// 3️⃣.3️⃣取出持续的时间(这里记住就可以了)
guard let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, i, nil) as? NSDictionary else { continue }
guard let gifDict = properties[kCGImagePropertyGIFDictionary] as? NSDictionary else { continue }
guard let frameDuration = gifDict[kCGImagePropertyGIFDelayTime] as? NSNumber else { continue }
totalDuration += frameDuration.doubleValue
}
// 4️⃣.给imageView设置属性
imageView.animationImages = images
imageView.animationDuration = totalDuration
imageView.animationRepeatCount = 0
// 5️⃣.开始播放
imageView.startAnimating()
}