news 2026/10/11 13:13:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何为DGActivityIndicatorView新增第33种动画:手把手自定义加载效果

【免费下载链接】DGActivityIndicatorView

DGActivityIndicatorView 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——用CAShapeLayer+UIBezierPath画圆。

第 2 步:注册枚举类型

打开 DGActivityIndicatorView.h,在DGActivityIndicatorAnimationType枚举末尾新增一行:

DGActivityIndicatorAnimationTypeBallSpinFadeLoader, DGActivityIndicatorAnimationTypeMyBounce // 👈 新增第 33 种

第 3 步:补充工厂映射

打开 DGActivityIndicatorView.m,做两处修改:

  1. 在文件头部的 import 区(L11-L43)加入#import "DGActivityIndicatorMyBounceAnimation.h";
  2. 在 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 个内置实现后可以总结出以下规律,帮你更快写出流畅的加载动画:

  1. 用beginTime错开节奏:多元素动画中,给每个元素设置不同的beginTime(或duration * i的偏移),就能产生"依次跳动"的韵律感,参考 DoubleBounce 的实现。
  2. repeatCount = HUGE_VALF:这是所有内置动画实现无限循环的统一写法。
  3. 动画组叠加属性:想同时动缩放和透明度,用CAAnimationGroup把两个关键帧动画打包,参考 ThreeDots 的写法。
  4. 尺寸自适应:始终基于传入的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 种加载动画吧!🚀

【免费下载链接】DGActivityIndicatorView

DGActivityIndicatorView 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
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 13:12:22

手写汉字识别实战:从HWDB数据预处理到CRNN端到端训练

简介:这是一套基于深度学习的手写汉字识别系统实现方案,面向人工智能初学者、计算机视觉方向学生及图像识别项目开发者,聚焦解决小样本下汉字识别准确率偏低的典型难题。资源包共56个文件,包含12个核心Python脚本(如tr…

作者头像 李华
网站建设 2026/10/11 13:11:08

图表即代码:用工程化思维维护系统架构图

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次听到 diagram-design 这个词,很多人会以为它只是“画图工具”的另一个说法。但真正在项目里被图表折磨过的人知道,问题从来不是“画不出来”,而是“画出来之后没…

作者头像 李华
网站建设 2026/10/11 13:10:52

X Show(2014)图文编辑软件实战指南:课件制作、动画效果与避坑技巧

简介:这是一款面向LED显示屏用户的X Show图文编辑软件2014版,适合使用X4E、X8E等板载网口控制卡的单双色、七彩及全彩屏项目,也适合门店、工程商在调试LED屏时做图文排版与节目下发。新版V40.0.260主要增加X4E/X8E两款板载网口产品支持&#…

作者头像 李华
网站建设 2026/10/11 13:09:07

发布前最后一轮回归测试全攻略:圈范围、排优先级、控风险

做软件测试这些年,我见过太多项目在最后关头翻车,翻车原因往往不是新功能有bug,而是“回归测试没做到位”。回归测试这个词,听起来像是测试流程里的常规动作——改完代码把老功能再点一遍,确认没改坏。但真正到了发布前…

作者头像 李华
网站建设 2026/10/11 13:08:21

PatchMatch图像修复实战:Python实现补丁匹配与NNF搜索

简介:这份资源是Python实现的PatchMatch补丁匹配算法代码包,面向计算机视觉方向的学习者与研究者,适合已掌握Python基础、希望深入理解图像对应与纹理合成等底层算法的人群。包内提供PatchMatch.py与PatchMatch_Bidirectional.py两个核心脚本…

作者头像 李华
网站建设 2026/10/11 13:08:09

Django全栈开发入门:从项目初始化到核心配置详解

1. 写在前面:为什么Django适合做全栈我第一次接触到Django,是在一个前后端混杂的旧项目里。那时候项目代码乱得像一锅粥,前端写在后端模板里,数据库连接散落在各个文件,改一个功能要翻遍十几个文件。后来重构时选了Dja…

作者头像 李华