美文网首页
iOS中展示gif图片(swift)

iOS中展示gif图片(swift)

作者: xymspace | 来源:发表于2020-05-09 18:02 被阅读0次

    需要导入框架:

    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暂停:

    • 需要自己写定时器
    • 按照图片各自播放时长依次展示
    • 监听用户点击,当用户点击时,获取当前展示图片、播放时间,暂停定时器
    • 用户再次点击时,从暂停时间处开启定时器,判断播放时间,加载对应图片

    相关文章

      网友评论

          本文标题:iOS中展示gif图片(swift)

          本文链接:https://www.haomeiwen.com/subject/gnqlnhtx.html