iOS 实现简单的加载等待动画示例(思路与实现)

发布时间 - 2026-01-11 01:06:37    点击率:

先看下最后基本要实现的效果


总结一下自己的实现思路与所用到的类

1.这个肯定是要自定义的View类,起名为XDColorCircle吧,最后用的时候达到这样的效果

//创建XDColorCircle的实例化对象
 XDColorCircle *circle=[[XDColorCircle alloc]initWithFrame:CGRectMake(0 ,100,self.view.frame.size.width,200)];
//添加到视图上展示
 [self.view addSubview:circle];

2.然后就是在XDColorCircle里面代码思路

  1. 需要先有一个渐变的图层(渐变由白到靛)且图层需只显示一个圆圈形状
  2. 渐变图层用CAGradientLayer这个类绘制
  3. 为这个CAGradientLayer的mask赋值一个圆圈的图层让它只展示一个圆圈CAShapeLayer
  4. 为CAGradientLayer图层添加基础动画就用CABasicAnimation来实现图层的旋转
  5. 中间需要一个大Label但肯定这个Label不能绘制在这个CAGradientLayer所在的图层之上了,因这个图层设置mask了 怎么绘制都显示个圈 ╮( ̄▽ ̄"")╭
  6. 所以最后确定了圈圈应该在另创建一个View上绘制然后与中间的Label一同做为XDColorCircle的子视图

3.思路捋顺代码就很方便

//先都写在这个构造方法里面吧
- (instancetype)initWithFrame:(CGRect)frame
{
  self = [super initWithFrame:frame];
  if (self) {
  }
  return self;
}

创建圈圈所在的View

    self.backgroundColor=[UIColor clearColor];
    UIView *circleView=[[UIView alloc]init];
    circleView.frame=CGRectMake(0, 0,frame.size.width,frame.size.height);
    circleView.backgroundColor=[UIColor blueColor];
    [self addSubview: circleView];

创建渐变图层并添加到圈圈视图

    CAGradientLayer * gradientLayer = [CAGradientLayer layer];
    gradientLayer.colors = @[(__bridge id)[UIColor whiteColor].CGColor,(__bridge id)[UIColor cyanColor].CGColor];
    gradientLayer.locations = @[@0.2,@1.0];
    gradientLayer.startPoint = CGPointMake(0, 0);
    gradientLayer.endPoint = CGPointMake(1.0, 0);
    gradientLayer.frame =CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    [circleView.layer insertSublayer:_gradientLayer atIndex:0];

添加mask属性只让图层只显示一个圈圈

    CAShapeLayer *layer=[[CAShapeLayer alloc]init];
    CGMutablePathRef pathRef=CGPathCreateMutable();
    CGPathAddRelativeArc(pathRef, nil,frame.size.width/2.0,frame.size.height/2.0,frame.size.width<frame.size.height?frame.size.width/2.0-5:frame.size.height/2.0-5,0, 2*M_PI);
    layer.path=pathRef;
    layer.lineWidth=5;
    layer.fillColor=[UIColor clearColor].CGColor;
    layer.strokeColor=[UIColor blackColor].CGColor;
    CGPathRelease(pathRef);
    circleView.layer.mask=layer;

让圈圈转起来添加动画

    CABasicAnimation *animation=[CABasicAnimation     animationWithKeyPath:@"transform.rotation.z"]; ;
    // 设定动画选项
    animation.duration = 1;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;
    animation.repeatCount =HUGE_VALF;
    // 设定旋转角度
    animation.fromValue = [NSNumber numberWithFloat:0.0]; // 起始角度
    animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; // 终止角度
    [circleView.layer addAnimation:animation forKey:@"rotate-layer"];

添加中间的大文字Label

    UILabel *label=[[UILabel alloc]init];
    label.text=@"测试中";
    label.font=[UIFont systemFontOfSize:32];
    label.textAlignment=NSTextAlignmentCenter;
    label.frame=CGRectMake(0, 0,frame.size.width,frame.size.height);
    label.backgroundColor=[UIColor clearColor];
    [self addSubview:label];

4.然后在controller里面使用

//创建XDColorCircle的实例化对象
 XDColorCircle *circle=[[XDColorCircle alloc]initWithFrame:CGRectMake(0 ,100,self.view.frame.size.width,200)];
//添加到视图上展示
 [self.view addSubview:circle];

只是个简单的动画实现小例子,可以看出活用CAShapeLayer和CABasicAnimation可以做出更炫的动画效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# ios  # 加载等待动画  # 图片加载等待动画  # 加载动画实现思路  # IOS等待时动画效果的实现  # iOS实现滚动字幕的动画特效  # IOS绘制动画颜色渐变折线条  # IOS 圆球沿着椭圆轨迹做动画  # iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer  # iOS 进度条、加载、安装动画的简单实现  # iOS 水波纹动画的实现效果  # IOS 实现3D 浮动效果动画  # iOS实现数字倍数动画效果  # 图层  # 在这个  # 只显示  # 自己的  # 是个  # 上了  # 自定义  # 可以看出  # 就用  # 来实现  # 很方便  # 创建一个  # 先看  # 它只  # 大家多多  # 都写  # 有一个  # 出更  # 就是在  # 确定了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云ECS服务器部署织梦CMS网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  无锡营销型网站制作公司,无锡网选车牌流程?  如何快速生成可下载的建站源码工具?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何注册花生壳免费域名并搭建个人网站?  EditPlus中的正则表达式 实战(1)  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何实现javascript表单验证_正则表达式有哪些实用技巧  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel如何处理异常和错误?(Handler示例)  网站制作企业,网站的banner和导航栏是指什么?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  php 三元运算符实例详细介绍  微信小程序 scroll-view组件实现列表页实例代码  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何快速生成高效建站系统源代码?  如何用虚拟主机快速搭建网站?详细步骤解析  如何用y主机助手快速搭建网站?  在线教育网站制作平台,山西立德教育官网?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  教你用AI润色文章,让你的文字表达更专业  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel如何实现API速率限制?(Rate Limiting教程)  Python进程池调度策略_任务分发说明【指导】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何彻底删除建站之星生成的Banner?  详解Android——蓝牙技术 带你实现终端间数据传输  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  魔毅自助建站系统:模板定制与SEO优化一键生成指南  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  公司门户网站制作流程,华为官网怎么做?  非常酷的网站设计制作软件,酷培ai教育官方网站?  MySQL查询结果复制到新表的方法(更新、插入)  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  JavaScript如何实现音频处理_Web Audio API如何工作?  如何用wdcp快速搭建高效网站?  深圳网站制作培训,深圳哪些招聘网站比较好?  常州企业网站制作公司,全国继续教育网怎么登录?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  清除minerd进程的简单方法  如何在阿里云服务器自主搭建网站?