import UIKit
import ImageIO
import QuartzCore
class GifView: UIView {
privatevar gifurl:URL!
privatevar imageArray:Array<CGImage> = []
privatevar timeArray:Array<NSNumber> = []
privatevar totalTime:Float =0
func showGifImageWithLocalName(name:String){
gifurl =Bundle.main.url(forResource: name, withExtension:"gif")
self.createFrame()
}
func createFrame(){
let url:CFURL =gifurl asCFURL
let gifSource =CGImageSourceCreateWithURL(url,nil)
let imageCount =CGImageSourceGetCount(gifSource!)
for iin 0..<imageCount{
let imageRef =CGImageSourceCreateImageAtIndex(gifSource!, i,nil)
imageArray.append(imageRef!)
let sourceDict =CGImageSourceCopyPropertiesAtIndex(gifSource!, i,nil)! as NSDictionary
let gifDict = sourceDict.value(forKey:kCGImagePropertyGIFDictionaryas String)as! NSDictionary
let time = gifDict.value(forKey:kCGImagePropertyGIFDelayTimeas String)as!NSNumber
timeArray.append(time)
totalTime = time.floatValue
}
self.showAnimation()
}
func showAnimation(){
let animation =CAKeyframeAnimation.init(keyPath:"contents")
var current:Float =0
var timeKeys:Array<NSNumber> = []
for timein timeArray{
timeKeys.append(NSNumber.init(value: current/totalTime))
current = time.floatValue
}
animation.keyTimes = timeKeys
animation.values =imageArray
animation.duration =CFTimeInterval(totalTime)
animation.repeatCount =HUGE
animation.isRemovedOnCompletion =false
self.layer.add(animation, forKey:"GIFVIEW")
}
}