【免费下载链接】DGActivityIndicatorView
DGActivityIndicatorView is a great way to make loading spinners in your application look nicer. It contains 32 different indicator view styles.
DGActivityIndicatorView 是一款专为 iOS(Objective-C)打造的加载动画库,内置32 种精美 loading 样式,帮你快速为 App 添加网络请求 Loading 遮罩和全局加载动画,彻底告别原生 UIActivityIndicatorView 的单调。
🎯 为什么需要加载动画库?
App 发起网络请求时,用户最怕"没反应"——不知道是卡住了还是在加载。一个清晰的 loading 提示能显著提升体验。但原生UIActivityIndicatorView样式单一,而 DGActivityIndicatorView 一个库就给你 32 种可选动画:
| 特性 | 说明 |
|---|---|
| 🎨 动画数量 | 32 种,含九宫格点、三圈脉冲、沙漏旋转等 |
| 🎛️ 自定义能力 | 可自由设置类型、颜色、尺寸,随时切换 |
| ⚙️ 底层技术 | 基于CALayer与 Core Animation,流畅省电 |
| 📦 接入成本 | 一行 CocoaPods 命令,或把源码文件夹拖进工程即可 |
| 📱 系统要求 | iOS 7.0+,Xcode 6+,支持 ARC |
它的核心入口就是 DGActivityIndicatorView.h,所有 32 种动画类型都以枚举形式集中定义,一目了然:
typedef NS_ENUM(NSUInteger, DGActivityIndicatorAnimationType) { DGActivityIndicatorAnimationTypeNineDots, // 九点阵列 DGActivityIndicatorAnimationTypeTriplePulse, // 三环脉冲 DGActivityIndicatorAnimationTypeBallPulse, // 小球脉冲 DGActivityIndicatorAnimationTypeRotatingSandglass, // 沙漏旋转 // …共 32 种 };🚀 一键安装:两种接入方式
方式一:CocoaPods 安装(推荐)
在项目的 Podfile 中添加依赖后执行安装命令:
pod 'DGActivityIndicatorView' pod install方式二:手动集成
直接把DGActivityIndicatorView源码文件夹拖入工程并引入头文件即可。源码文件不多,核心就集中在 DGActivityIndicatorView/DGActivityIndicatorView/ 目录下:
git clone https://gitcode.com/gh_mirrors/dg/DGActivityIndicatorView📝 4步上手:显示一个加载动画
API 设计得非常直白,四步走:
// 1. 创建实例:指定动画类型、颜色、尺寸 DGActivityIndicatorView *indicator = [[DGActivityIndicatorView alloc] initWithType:DGActivityIndicatorAnimationTypeDoubleBounce tintColor:[UIColor whiteColor] size:20.0f]; // 2. 设置 frame indicator.frame = CGRectMake(0.0f, 0.0f, 50.0f, 50.0f); // 3. 添加到视图 [self.view addSubview:indicator]; // 4. 开始动画 [indicator startAnimating];关键 API 只有三个:
startAnimating/stopAnimating:控制动画开关type:动画类型,可随时修改,动画会自动重建(见 DGActivityIndicatorView.m 中的setType:实现)tintColor/size:颜色和尺寸,默认 40pt 白色
🌐 实战一:网络请求 Loading 遮罩
最典型的使用场景:请求发出时展示全屏半透明遮罩 + 动画,回调回来后移除。
- (void)showLoadingMask { UIView *mask = [[UIView alloc] initWithFrame:self.view.bounds]; mask.backgroundColor = [UIColor colorWithWhite:0 alpha:0.4]; [self.view addSubview:mask]; DGActivityIndicatorView *indicator = [[DGActivityIndicatorView alloc] initWithType:DGActivityIndicatorAnimationTypeBallClipRotatePulse tintColor:[UIColor whiteColor] size:40.0f]; indicator.center = mask.center; [mask addSubview:indicator]; [indicator startAnimating]; self.loadingMask = mask; } - (void)dismissLoadingMask { [self.loadingMask.subviews enumerateObjectsUsingBlock:^(__kindof UIView *v, NSUInteger i, BOOL *stop) { if ([v isKindOfClass:[DGActivityIndicatorView class]]) [(DGActivityIndicatorView *)v stopAnimating]; }]; [self.loadingMask removeFromSuperview]; self.loadingMask = nil; }发起请求时调用showLoadingMask,在成功/失败回调中都调用dismissLoadingMask,就能保证无论请求快慢都不会出现"遮罩卡死"的问题(记得网络层要统一处理成功与失败两条路径)。
🧩 实战二:封装全局加载动画
每个页面都要复制一遍遮罩代码太繁琐,更好的做法是给UIViewController加一个类别,封装成全局 API:
@interface UIViewController (Loading) - (void)dg_showLoading:(DGActivityIndicatorAnimationType)type; - (void)dg_dismissLoading; @end实现就是把上面的遮罩逻辑搬进类别里,并在view上管理一个全局单例遮罩。之后任何页面都只需一行:
[self dg_showLoading:DGActivityIndicatorAnimationTypeRotatingSandglass]; // 请求完成 [self dg_dismissLoading];💡 小技巧:全局封装建议做成单例遮罩(同一时间只存在一个),避免多个请求并发时遮罩层层叠加。
🎨 32 种动画怎么选?
仓库自带的示例工程把所有动画排成了 7×5 的预览墙,打开运行即可查看每一种的实际效果(见 ViewController.m 中的activityTypes数组)。选择建议:
| 使用场景 | 推荐动画类型 | 理由 |
|---|---|---|
| 全屏请求遮罩 | BallClipRotatePulse/TripleRings | 圆形线条,中心留白,辨识度高 |
| 列表刷新、短加载 | NineDots/BallPulse | 点阵呼吸感,轻巧不抢眼 |
| 耗时操作(上传/导出) | RotatingSandglass/LineScalePulseOut | 节奏明确,暗示"需要耐心" |
| 深色背景 | BallRotate(白色 tintColor) | 线条简洁,对比强烈 |
想自己扩展动画?只需让新类实现 DGActivityIndicatorAnimationProtocol.h 中的协议方法setupAnimationInLayer:withSize:tintColor:,并在 DGActivityIndicatorView.m 的工厂方法里注册即可。所有动画类共享的动画基类见 DGActivityIndicatorAnimation.h。
⚠️ 常见坑与注意事项
- 别忘了停止:
stopAnimating会在停止时隐藏视图;请求超时或取消时同样要调用,否则用户会看到一直转的动画。 - 主线程调用:视图操作必须在主线程,网络回调若不在主线程请先 dispatch 回主线程。
- 尺寸与 frame:动画尺寸由
size参数决定内部绘制,外层frame控制占位,两者建议一致。 - 依赖说明:库仅依赖 UIKit / Foundation,包体积极小(见 DGActivityIndicatorView.podspec)。
📚 总结
DGActivityIndicatorView 用极小的体积解决了 iOS 加载体验的"颜值"问题:32 种动画、4 行代码上手、1 行依赖接入。配合本文的"网络请求遮罩 + 全局封装"两个实战方案,你可以快速为项目搭建统一、专业的加载体验。更多细节可查阅官方说明 README.md。
【免费下载链接】DGActivityIndicatorView
DGActivityIndicatorView is a great way to make loading spinners in your application look nicer. It contains 32 different indicator view styles.
相关推荐
Metro UI CSS Activity 组件实战指南:七种加载动画、全局遮罩与 CSS 变量定制
Metro UI CSS Activity 组件实战指南:七种加载动画、全局遮罩与 CSS 变量定制 Activity 是 Metro UI CSS 框架内置的
前端UI组件element-react Loading 加载组件实战指南:容器内加载、自定义文案与全屏遮罩
element react Loading 加载组件实战指南:容器内加载、自定义文案与全屏遮罩 本指南以 Loading 加载文档 https://link.g
前端UI组件设计系统AzerothCore 自建 WotLK 私服:先跑通最小闭环
AzerothCore 自建 WotLK 私服:先跑通最小闭环 凌晨两点,你盯着 WoW 登录界面上"排队 300+"的数字,朋友的电脑连 3.3.5a 客户端
游戏开发后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考