需要导入框架:
import ImageIO
实现步骤:
- 获取gif图片
- 获取组成gif图片的总图片数量值
- 通过遍历,获取单张图片,及其播放时间;累加获得总图片时间
- 将获得的图片和总时间,传递给图片的animationImages和animationDuration
- 配置播放次数animationRepeatCount
- 播放动画 startAnimating()
guard let path = Bundle.main.path(forResource: "img.gif", ofType: nil) else {
return
}
guard let data = NSData(contentsOfFile: path) else {
return
}
guard let imgSource: CGImageSource = CGImageSourceCreateWithData(data as CFData, nil) else {
return
}
// 获取组成gif的图片总数量(gif都是由很多张图片组成)
let imageCount = CGImageSourceGetCount(imgSource)
var images = [UIImage]()
var totalDuration : TimeInterval = 0
for i in 0...imageCount {
guard let cgImage = CGImageSourceCreateImageAtIndex(imgSource, i, nil) else {
continue
}
if i == 0 {
// gif播放完毕时,展示第一张图
gifImageView.image = UIImage(cgImage: cgImage)
}
guard let properties : NSDictionary = CGImageSourceCopyPropertiesAtIndex(imgSource, i, nil) else {
continue
}
// 获取单张图片的播放时长
guard let gifDic = properties[kCGImagePropertyGIFDictionary] as? NSDictionary else {
continue
}
guard let duration = gifDic[kCGImagePropertyGIFDelayTime] as? NSNumber else {
continue
}
// 将播放时间累加
totalDuration += duration.doubleValue
// 获取到所有的image
let image = UIImage(cgImage: cgImage)
images.append(image)
}
gifImageView.animationImages = images
gifImageView.animationDuration = totalDuration
gifImageView.animationRepeatCount = 0
gifImageView.startAnimating()
Gif暂停:
- 需要自己写定时器
- 按照图片各自播放时长依次展示
- 监听用户点击,当用户点击时,获取当前展示图片、播放时间,暂停定时器
- 用户再次点击时,从暂停时间处开启定时器,判断播放时间,加载对应图片
网友评论