DGActivityIndicatorView实战:网络请求Loading遮罩与全局加载动画封装

发布时间:2026/10/11 17:23:26

DGActivityIndicatorView实战:网络请求Loading遮罩与全局加载动画封装 【免费下载链接】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 是一款专为 iOSObjective-C打造的加载动画库内置32 种精美 loading 样式帮你快速为 App 添加网络请求 Loading 遮罩和全局加载动画彻底告别原生 UIActivityIndicatorView 的单调。 为什么需要加载动画库App 发起网络请求时用户最怕没反应——不知道是卡住了还是在加载。一个清晰的 loading 提示能显著提升体验。但原生UIActivityIndicatorView样式单一而 DGActivityIndicatorView 一个库就给你 32 种可选动画特性说明 动画数量32 种含九宫格点、三圈脉冲、沙漏旋转等️ 自定义能力可自由设置类型、颜色、尺寸随时切换⚙️ 底层技术基于CALayer与 Core Animation流畅省电 接入成本一行 CocoaPods 命令或把源码文件夹拖进工程即可 系统要求iOS 7.0Xcode 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加一个类别封装成全局 APIinterface 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。赞分享【免费下载链接】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点击查看免费下载相关推荐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),仅供参考
延伸阅读

更多相关文章

2026/10/11 17:18:26

无人船操作全流程解析:从上电检查到航线规划的实战指南

简介:《无人船操作文档.docx》是一份系统讲解智能无人测量船装配与操作的中文技术文档,目标读者是航道监测、水利勘察、海洋调查等领域的现场技术人员,也适合刚接触无人船的新手操作员。文档以江苏中海达iBoat系列无人测量船为例,…

2026/10/11 17:18:26

Oracle 19c RAC静默安装实战:ASM磁盘绑定与GI集群部署

简介:本资源是一份面向Oracle DBA与系统运维工程师的实战型RAC部署指南,聚焦Red Hat Enterprise Linux 7.6平台下Oracle 19c高可用集群的全流程安装与配置。内容覆盖OS环境检查、THP禁用与HugePages启用、内核参数调优(含Preinstall RPM与手工…

2026/10/11 17:18:26

编译原理实验报告:从词法分析到符号表的决策与实现

简介:一份针对东北大学秦皇岛分校编译原理课程的实验报告,围绕PL/0语言词法分析程序的设计与实现展开,适合计算机专业本科生或正在学习编译原理的开发者用于理解词法分析的核心流程。资源包内共1个doc文档,压缩包大小122KB&#x…

2026/10/11 18:23:30

项目策划书与任务书模板:从策划到验收的完整指南

简介:这份华为项目管理模板聚焦项目策划与任务书环节,面向项目经理、PMO及希望规范项目启动流程的从业者,帮助解决项目目标模糊、职责不清、里程碑缺失等常见问题。模板以中英双语结构呈现,涵盖项目基本情况、项目描述、里程碑计划…

2026/10/11 18:23:30

Python+sklearn文本挖掘:100份文件从读取到建模实战

简介:这份资源面向希望入门文本挖掘与机器学习实战的Python学习者,围绕100份文件的批量分析场景,演示如何借助sklearn完成从文本预处理到模型评估的完整流程。内容涉及分词、去停用词、词干提取与词形还原,并对比词袋模型与TF-IDF…

2026/10/11 18:23:30

Paperxie实测:AI生成论文初稿、图表联动与排版自查全流程拆解

最近被问得最多的一句话是:“那个 Paperxie 到底能不能用?”问的人里有准备开题的本科生,也有反复被导师催改的硕士生。我干脆拿一个模拟项目X从零开始走了一遍完整流程:建文档、生成毕业论文初稿、做数据图表、调整排版&#xff…

2026/10/11 18:23:30

酒店客房预订管理系统开发实战:uniapp小程序与PHP/Python后端设计

做酒店客房预订这类管理系统,很多人的第一反应是“不就是几个列表页面加一张订单表吗”。等你真的把需求聊完、代码写起来,才会发现日期边界、超卖控制、支付回调、角色权限这些细节,每一个都能让你调试到半夜。这篇文章要聊的,就…

2026/10/11 18:18:29

人形机器人电气拓扑与关节驱动人才缺口:技术栈拆解与切入路径

简介:这份PDF报告聚焦全球人形机器人领域的高层次人才格局,适合机器人方向的技术研发人员、产业研究者及人才战略制定者阅读,帮助读者快速把握学术与研发两类人才的国别分布、机构排名与团队动态。资源包为1个PDF文件,大小约1.38M…

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
免费获取方案
☎咨询二维码 ☎ ↑