Swift gif动态图显示

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")

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值