美文网首页
iOS 显示GIF图片

iOS 显示GIF图片

作者: iOS虞 | 来源:发表于2020-12-09 11:46 被阅读0次
  1. 不废话直接上代码,注意一点要import ImageIO
//
//  GIFImageView.swift
//  SugarTools
//
//  Created by yuzhengkai on 2020/12/8.
//  Copyright © 2020 yzk. All rights reserved.
//

import UIKit
import ImageIO

class GIFImageView: UIImageView {

    var gifname: String?
    
    func startGIF() {
        
        guard let path = Bundle.main.path(forResource: gifname, ofType: nil) else {
            return
        }
        let fileurl = URL(fileURLWithPath: path)
        guard let data = try? Data(contentsOf: fileurl) else {
            return
        }
        
        guard let gifsource = CGImageSourceCreateWithData(data as CFData, nil) else {
            return
        }
        //拿到分解多少张图片,也就是有多少帧
        let gifcount = CGImageSourceGetCount(gifsource)
        var images = [UIImage]()
        var totalDuration: TimeInterval = 0
        
        for i in 0..<gifcount {
            guard let cgimage = CGImageSourceCreateImageAtIndex(gifsource, i, nil) else {
                return
            }
            let image = UIImage(cgImage: cgimage)
            // 如果只有一帧,直接显示
            if i == 0 {
                
                self.image = image
            }
            images.append(image)
            
            //读取时每一帧的属性
            guard let properties = CGImageSourceCopyPropertiesAtIndex(gifsource, i, nil) as? [CFString : Any] else {
                continue
            }
            //读取GIF图片信息
            guard let gifdict = properties[kCGImagePropertyGIFDictionary] as? [CFString : Any] else {
                continue
            }
            //GIF每一帧的时间
            guard let gifduration = gifdict[kCGImagePropertyGIFDelayTime]  as? NSNumber else {
                continue
            }
            totalDuration += gifduration.doubleValue
        }
            self.animationImages = images
            self.animationDuration = totalDuration
            self.animationRepeatCount = 0
            self.startAnimating()
    }
    
    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */
}

相关文章

网友评论

      本文标题:iOS 显示GIF图片

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