当前位置: 首页 > news >正文

Swift Extension UIImage扩展支持加载GIF动画

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

Swift-Extension-UIImage.zip

文章目录

  • 效果
  • 使用
  • 封装代码

效果

使用

import UIKit import SnapKit import Alamofire class ViewController:UIViewController{lazy private var imageView:UIImageView={let imageView=UIImageView()returnimageView}()override funcviewDidLoad(){super.viewDidLoad()view.backgroundColor=.white imageView.image=UIImage.gif(name:"nahuoLoading")view.addSubview(imageView)imageView.snp.makeConstraints{makeinmake.width.height.equalTo(50)make.center.equalToSuperview()}}}

封装代码

import UIKit import ImageIO import MobileCoreServices extension UIImage{/// 根据本地 GIF 文件名生成动画 UIImage/// - Parameter name: GIF 文件名(不带扩展名)/// - Returns: 可选的 UIImage(animated)staticfuncgif(name:String)->UIImage?{guard let path=Bundle.main.path(forResource:name,ofType:"gif"),let gifData=try?Data(contentsOf:URL(fileURLWithPath:path))else{returnnil}returngif(data:gifData)}/// 根据 Data 生成动画 UIImage/// - Parameter data: GIF 二进制数据/// - Returns: 可选的 UIImage(animated)staticfuncgif(data:Data)->UIImage?{guard let source=CGImageSourceCreateWithData(data as CFData,nil)else{print("Cannot create image source")returnnil}let count=CGImageSourceGetCount(source)var images=[UIImage]()var duration:TimeInterval=0foriin0..<count{iflet cgImage=CGImageSourceCreateImageAtIndex(source,i,nil){images.append(UIImage(cgImage:cgImage))// 获取每帧持续时间let properties=CGImageSourceCopyPropertiesAtIndex(source,i,nil)as Dictionary?iflet gifInfo=properties?[kCGImagePropertyGIFDictionary as String as NSObject]as?[String:Any]{iflet delayTime=gifInfo[kCGImagePropertyGIFUnclampedDelayTime as String]as?NSNumber{duration+=delayTime.doubleValue}elseiflet delayTime=gifInfo[kCGImagePropertyGIFDelayTime as String]as?NSNumber{duration+=delayTime.doubleValue}}}}ifduration==0{duration=Double(count)*0.1}returnUIImage.animatedImage(with:images,duration:duration)}}
http://www.jsqmd.com/news/854144/

相关文章:

  • 论文降AI率工具排行榜,2026年5月精选4款知网降AI软件 - 我要发一区
  • 保姆级教程:用5W规则搞定高速差分对布线,告别信号串扰
  • STM32CubeMX零基础实战:5分钟搞定HC-SR505人体感应模块,让你的设备学会“看人下菜碟”
  • STM32F7移植USB-CDC
  • uni-card组件进阶玩法:从基础展示到带交互的‘动态卡片’实战
  • 创业公司如何借助 Taotoken 快速试错不同大模型以确定产品原型方向
  • Python 浅拷贝与深拷贝:为什么我改了 b,a 也跟着变了?
  • AMD Ryzen处理器深度调试终极指南:从核心超频到硬件优化
  • 新手如何选择一款好用的AI编程工具
  • 2026 全球出海 GEO 技术实力与自主可控榜单:旗引云创 GEO 领跑国内,源码部署定义行业新标准 - 资讯速览
  • GitHub开发者如何快速接入Taotoken大模型API并管理密钥
  • 华为USG6000防火墙安全策略配置避坑指南:从默认策略到实战规则,新手必看
  • 智慧工业控制面板工控部件元器件LCD部件检测数据集VOC+YOLO格式365张8类别
  • 别再手动改.rou文件了!一个更稳妥的CAM350 V10.7导入Allegro槽孔文件的方法
  • 智能手表常见问题解答(2026最新专家版) - 资讯速览
  • 别再只会用1.2.3.了!LaTeX的enumitem包让你的论文列表样式瞬间专业起来
  • GeoDa空间分析避坑指南:从权重矩阵构建到双变量LISA图解读,一次讲清
  • 新手避坑指南:用STC8A单片机和TB6612模块搞定三轮循迹小车(附完整代码)
  • 2026年AI写作辅助平台实测认证:5款神器从构思到提交全流程护航
  • 保姆级教程:手把手教你配置华为USG6000V防火墙的Telnet和Web管理(附常见报错解决)
  • 为内部知识问答系统集成 Taotoken 多模型增强回答质量
  • 收藏!小白程序员必看:如何抓住AI大模型时代红利?从入门到高薪就业全解析!
  • 11.回溯法解决生成括号问题
  • 2026年南京除甲醛企业怎么挑?看准这3个关键点就够了 - 资讯速览
  • Agent如何做规划:ReAct、CoT、ToT思维框架详解
  • PCB后道制程收板方案:从高速收板到隔纸防护的设备配置与选型
  • 快速构建原型时如何借助 Taotoken 分钟级接入加速开发
  • 应对2026AIGC检测算法:5大热门降AI工具实测与免费提示词秘籍
  • 有哪些AI论文工具是真的坚守学术严谨,而不是空洞拼凑?
  • Web网站服务