如何为DGActivityIndicatorView新增第33种动画:手把手自定义加载效果

发布时间:2026/10/11 13:13:09

如何为DGActivityIndicatorView新增第33种动画:手把手自定义加载效果 【免费下载链接】DGActivityIndicatorViewDGActivityIndicatorView is a great way to make loading spinners in your application look nicer. It contains 32 different indicator view styles.项目地址https://gitcode.com/gh_mirrors/dg/DGActivityIndicatorView点击查看免费下载DGActivityIndicatorView 是一款流行的 iOS 加载动画Loading Spinner组件库内置 32 种精美的加载指示器样式。当你发现现有样式不够用时不必重写整个组件——它的架构非常友好按照本文 5 个步骤你就能轻松新增第 33 种自定义加载动画效果。一、先看懂架构3 层结构让扩展变得简单 ️在动手之前花 2 分钟理解 DGActivityIndicatorView 的三层设计是写好新动画的前提层级职责对应文件 枚举层定义所有动画类型的目录DGActivityIndicatorView.h 工厂层根据枚举创建对应的动画对象DGActivityIndicatorView.m 动画实现层每种样式一个独立类负责绘制与动效DGActivityIndicatorView/Animations/核心逻辑就一条链路你通过枚举指定一种类型 → 工厂方法activityIndicatorAnimationForAnimationType:用switch语句返回对应动画实例 → 动画类在CALayer上执行 Core Animation 动画。所以新增动画本质上就是三件事写一个动画类、注册一个枚举、补一个工厂分支。二、准备工作跑通示例项目先确保示例能正常编译运行这是最好的验证环境git clone https://gitcode.com/gh_mirrors/dg/DGActivityIndicatorView用 Xcode 打开 DGActivityIndicatorExample.xcodeproj直接 Run 即可。示例工程的 ViewController.m 用一个数组列出了全部 32 种动画类型并在屏幕上平铺展示——之后你的新动画也会出现在这里。 环境要求Xcode 6、iOS 8.0详见 README.md。三、新增第 33 种动画完整 5 步教程假设我们要新增一种名为MyBounce的弹跳动画。第 1 步创建动画类在 DGActivityIndicatorView/Animations/ 目录下新建DGActivityIndicatorMyBounceAnimation.h与.m两个文件继承基类DGActivityIndicatorAnimation// DGActivityIndicatorMyBounceAnimation.h #import DGActivityIndicatorAnimation.h interface DGActivityIndicatorMyBounceAnimation : DGActivityIndicatorAnimation end然后在.m中实现协议 DGActivityIndicatorAnimationProtocol 要求的唯一方法这是整个动画的心脏- (void)setupAnimationInLayer:(CALayer *)layer withSize:(CGSize)size tintColor:(UIColor *)tintColor { // 在这里创建 CALayer配置颜色、圆角 // 并添加 CABasicAnimation / CAKeyframeAnimation 实现动效 }基类 DGActivityIndicatorAnimation 已提供三个工厂方法创建基础动画、关键帧动画、动画组直接调用即可省去样板代码。不知道怎么写项目里 32 个现成模板照着抄就行想看简洁的缩放效果参考 DGActivityIndicatorDoubleBounceAnimation.m——两个圆点交替缩放不到 40 行想看多图层组合效果参考 DGActivityIndicatorThreeDotsAnimation.m——用动画组同时控制缩放和透明度想看形状绘制参考 DGActivityIndicatorBallBeatAnimation.m——用CAShapeLayerUIBezierPath画圆。第 2 步注册枚举类型打开 DGActivityIndicatorView.h在DGActivityIndicatorAnimationType枚举末尾新增一行DGActivityIndicatorAnimationTypeBallSpinFadeLoader, DGActivityIndicatorAnimationTypeMyBounce // 新增第 33 种第 3 步补充工厂映射打开 DGActivityIndicatorView.m做两处修改在文件头部的 import 区L11-L43加入#import DGActivityIndicatorMyBounceAnimation.h在 switch 分支 中新增case DGActivityIndicatorAnimationTypeMyBounce: return [[DGActivityIndicatorMyBounceAnimation alloc] init];别忘了把新建的两个文件拖进 Xcode 工程并勾选 Target否则无法参与编译。第 4 步在示例工程中验证打开 ViewController.m在activityTypes数组末尾追加(DGActivityIndicatorAnimationTypeMyBounce)Run 之后就能看到你的第 33 种动画出现在演示网格中。第 5 步调用方式一行代码动画写好后业务代码里的使用方式与其他 32 种完全一致无需任何额外配置DGActivityIndicatorView *view [[DGActivityIndicatorView alloc] initWithType:DGActivityIndicatorAnimationTypeMyBounce tintColor:[UIColor whiteColor] size:40.0f]; [self.view addSubview:view]; [view startAnimating];四、写好加载动效的 4 个实用技巧 ✨通读 32 个内置实现后可以总结出以下规律帮你更快写出流畅的加载动画用beginTime错开节奏多元素动画中给每个元素设置不同的beginTime或duration * i的偏移就能产生依次跳动的韵律感参考 DoubleBounce 的实现。repeatCount HUGE_VALF这是所有内置动画实现无限循环的统一写法。动画组叠加属性想同时动缩放和透明度用CAAnimationGroup把两个关键帧动画打包参考 ThreeDots 的写法。尺寸自适应始终基于传入的size参数计算布局用户设置不同size时动画会自动重排见 layoutSubviews。五、分发与提交前的检查清单 ✅两个新文件已加入 Xcode Target 的 Compile Sources枚举、工厂分支、示例数组三处同步修改不同tintColor、不同size下动画显示正常若通过 CocoaPods 分发注意 podspec 的source_files采用DGActivityIndicatorView/**/*.{h,m}通配新文件放进目录即可被自动收录发布时记得递增版本号。其实官方 README 的 TODO 里就写着Add more different animations——为这个加载动画库贡献第 33 种样式正是原作者期待的事情。写在最后回顾一下本次扩展的核心路径步骤修改位置工作量新建动画类Animations/约 40 行注册枚举DGActivityIndicatorView.h1 行工厂分支DGActivityIndicatorView.m3 行示例展示ViewController.m1 行DGActivityIndicatorView 这种枚举 工厂 协议的扩展式设计是学习 iOS 组件化架构的绝佳范本。动手加上属于你的第 33 种加载动画吧赞分享【免费下载链接】DGActivityIndicatorViewDGActivityIndicatorView is a great way to make loading spinners in your application look nicer. It contains 32 different indicator view styles.项目地址https://gitcode.com/gh_mirrors/dg/DGActivityIndicatorView点击查看免费下载相关推荐DGActivityIndicatorView动画原理剖析CALayer与关键帧如何驱动32种加载效果DGActivityIndicatorView动画原理剖析CALayer与关键帧如何驱动32种加载效果 DGActivityIndicatorView 是一款终极指南如何快速自定义OwlCarousel2加载动画效果终极指南如何快速自定义OwlCarousel2加载动画效果 OwlCarousel2是一款优秀的响应式轮播插件其懒加载功能可以显著提升页面性能。在前100字前端UI组件终极指南如何让小爱音箱播放任意音乐彻底摆脱平台限制终极指南如何让小爱音箱播放任意音乐彻底摆脱平台限制 你是否厌倦了智能音箱的音乐平台限制想用你的小爱音箱播放任意歌曲却总是遇到版权问题今天我将为你揭秘一后端智能硬件音视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/11 13:08:09

jocky代码混淆工具:Eclipse集成与Maven配置实战指南

简介:Jocky是一款面向Java开发者的代码混淆工具,以Eclipse插件形式提供,适合需要在日常开发流程中直接完成源码级混淆的工程师使用。与常见混淆编译器不同,Jocky直接从源码入手,编译过程本身即完成混淆,无需…

2026/10/11 13:08:09

Python+neo4j医疗知识图谱问答系统构建全流程

简介:这是一份基于Python实现的医疗知识图谱问答系统完整工程,面向计算机相关专业毕业设计、知识图谱或自然语言处理方向的开发者,也适合希望快速搭建医疗问答原型的工程师参考。系统围绕“医疗问题—图谱查询—答案生成”主线,集…

2026/10/11 15:33:21

考研数据库9套题:关系代数、SQL与范式分解高频考点全解析

简介:这份PDF是面向计算机考研学生的数据库复习题库,包含9套模拟试卷,围绕数据管理技术演进、数据库系统结构、关系运算与SQL、函数依赖与范式、事务并发控制及安全性等核心考点设置题目。每套题兼顾选择题、填空题和简单应用题,从…

2026/10/11 15:33:21

为什么越来越多架构师把AI从IDE搬进终端?

最近和几个同行聊到一个有点反直觉的现象:大家桌面上打开IDE的频率越来越低,反而是终端窗口越开越多。注意,这不是说AI编程助手不吃香了——恰恰相反,我身边几乎没人不用这类工具。但从最早的补全插件到Cursor这类AI编辑器&#x…

2026/10/11 15:33:21

工具、服务面与外壳:opencode三层架构与工程化集成实践

这篇是 opencode 深入系列的最后一篇。上篇我重点拆了它的整体架构和核心执行机制,但很多人看完反馈,说还是有两个坎过不去:一是 opencode 里反复出现的工具、服务面、外壳这些词,对应到代码层面到底是谁调用谁,谁又该…

2026/10/11 15:33:21

小项目实战:代码审查、重构与提交前检查全流程指南

1. 为什么“提交前检查”值得单独拎出来讲很多人做小项目时有个习惯:功能跑通了,随手一个git add . && git commit -m "update"就推上去了。等到过两周回头看自己的代码,或者别人接手你的仓库,第一反应往往是—…

2026/10/11 15:28:20

Python数据可视化实战:新零售销售数据清洗与pyecharts绘图教案

简介:《Python数据可视化实战》第7章新零售智能销售数据可视化实战配套教案,面向大数据类专业的教师与学生,围绕某公司智能销售设备数据,讲解从理解工程背景、读取清洗与规约数据,到借助pyecharts绘制交互式图形并撰写…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑