iOS核心动画学习整理
最近利用业余时间终于把iOS核心动画高级技巧(https://zsisme.gitbooks.io/ios-/content/chapter1/the-layer-tree.html)看完,对应其中一些知识做了相应的整理,整理为demo(https://github.com/PurpleSweetPotatoes/Layer_learn)。此demo中都是基于教程书籍中的编程示例,并加上了注解以方便各位iOS爱好者学习使用。
在这里利用此教程中的基础知识做了2个小demo,活动指示器效果和火焰效果。先让我们看看效果图
在这里我需要使用到CALayer的两个子类CAReplicatorLayer和CAEmitterLayer。
1.CAReplicatorLayer的目的是为了高效生成许多相似的图层。它会绘制一个或多个图层的子图层,并在每个复制体上应用不同的变换。此处直接搬出运行代码
1 //需要实例化的个数 2 int numofInstance = 10; 3 //动画时长 4 CGFloat duration = 1.0f; 5 //创建repelicator对象 6 CAReplicatorLayer *repelicator = [CAReplicatorLayer layer]; 7 //设置其位置 8 repelicator.frame = self.view.bounds; 9 //需要生成多少个相同实例 10 repelicator.instanceCount = numofInstance; 11 //代表实例生成的延时时间; 12 repelicator.instanceDelay = duration / numofInstance; 13 //设置每个实例的变换样式 14 repelicator.instanceTransform = CATransform3DMakeRotation(M_PI * 2.0 / 10.0, 0, 0, 1); 15 16 //创建repelicator对象的子图层,repelicator会利用此子图层进行高效复制。并绘制到自身图层上 17 CALayer *layer = [CALayer layer]; 18 //设置子图层的大小位置 19 layer.frame = CGRectMake(0, 0, 10, 10); 20 //子图层的仿射变换是基于repelicator图层的锚点,因此这里将子图层的位置摆放到此锚点附近。 21 CGPoint point = [repelicator convertPoint:repelicator.position fromLayer:self.view.layer]; 22 layer.position = CGPointMake(point.x, point.y - 20); 23 //设置子图层的背景色 24 layer.backgroundColor = [UIColor whiteColor].CGColor; 25 //将子图层切圆 26 layer.cornerRadius = 5; 27 //将子图层添加到repelicator上 28 [repelicator addSublayer:layer]; 29 //对layer进行动画设置 30 CABasicAnimation *animaiton = [CABasicAnimation animation]; 31 //设置动画所关联的路径属性 32 animaiton.keyPath = @"transform.scale"; 33 //设置动画起始和终结的动画值 34 animaiton.fromValue = @(1); 35 animaiton.toValue = @(0.1); 36 //设置动画时间 37 animaiton.duration = duration; 38 //设置动画次数 39 animaiton.repeatCount = INT_MAX; 40 //添加动画 41 [layer addAnimation:animaiton forKey:nil];
2.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。CAEmitterLayer看上去像是许多CAEmitterCell的容器,这些CAEmitterCell定义了一个粒子效果。下面直接上代码
1 - (CAEmitterLayer *)emitter { 2 if (_emitter == nil) { 3 //创建粒子图层容器 4 CAEmitterLayer *layer = [CAEmitterLayer layer]; 5 //设置发射器位置 6 layer.emitterPosition = self.view.center; 7 //设置发射器范围 8 layer.emitterSize = CGSizeMake(50, 30); 9 //设置发射器形状 10 layer.emitterShape = kCAEmitterLayerLine; 11 //设置发射器发射模式 12 layer.emitterMode = kCAEmitterLayerSurface; 13 //设置发射器的渲染模式 14 layer.renderMode = kCAEmitterLayerAdditive; 15 16 _emitter = layer; 17 } 18 return _emitter; 19 }
接着创建CAEmitterCell粒子图层并放入CAEmitterLayer容器中
1 //创建粒子 2 CAEmitterCell *cell = [CAEmitterCell emitterCell]; 3 //配置粒子图像 4 cell.contents = (__bridge id)[UIImage imageNamed:@"火焰"].CGImage; 5 //粒子每秒发射个数 6 cell.birthRate = 400; 7 //粒子生命周期 8 cell.lifetime = 3.0; 9 //粒子旋转角度 10 cell.spin = M_PI / 2; 11 //粒子颜色 12 cell.color = [UIColor colorWithRed:1.000 green:0.681 blue:0.178 alpha:1.000].CGColor; 13 //粒子衰减过程 14 cell.alphaSpeed -= 1; 15 //粒子发射速度 16 cell.velocity = 40; 17 //粒子发射速度可变范围,如果此处设置为10 则速度值在30 - 50 之类变动 18 cell.velocityRange = 10; 19 //粒子缩放比例 20 cell.scaleSpeed -= 1; 21 //cell发射角度范围 22 cell.emissionLongitude = 0; 23 //cell发射偏转角度 24 cell.emissionRange = M_PI / 4; 25 //将配置好的粒子放入容器中 26 self.emitter.emitterCells = @[cell];
此处编写这两种效果图旨在引起各位iOS爱好者的对动画和layer层学习的兴趣,如想深入学习请点击上面链接自行学习。另外欢迎大家与笔者一起学习交流,对于只求代码者一律不回,谢谢!上述有任何错误欢迎指正!
转载于:https://www.cnblogs.com/purple-sweet-pottoes/p/5003295.html
iOS核心动画学习整理相关推荐
- iOS 核心动画 Core Animation浅谈
代码地址如下: http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVi ...
- iOS核心动画详解swift版----基础动画
2019独角兽企业重金招聘Python工程师标准>>> iOS核心动画详解swift版---基础动画 创建工程,添加2个ViewController,通过rootViewContro ...
- iOS开发系列--让你的应用“动”起来--超详细的ios核心动画介绍
概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...
- iOS核心动画之CoreAnimation
本文目录 一.Core Animation简介 二.Core Animation的使用步骤 三.CAAnimation 四.CAPropertyAnimation 回到顶部 一.Core Animat ...
- iOS核心动画Core Animation(一)
核心动画Core Animation(一) 一.简述 Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core ...
- iOS核心动画以及UIView动画的介绍
我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...
- iOS核心动画高级技术(十二) 性能调优
Code should run as fast as necessary, but no faster. 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Anima ...
- iOS核心动画--浅析三个动画的实现
点击打开链接 http://www.jianshu.com/p/272aa1f26c62 动画和绘图是iOS开发中非常重要的部分.我们要实现一个动效,首先就是动画解析,分析动画的路径,然后再考虑具体的 ...
- iOS 核心动画的变换
很不幸,没人能告诉你母体是什么,你只能自己体会 – 骇客帝国 如果你依然在编程的世界里迷茫,不知道自己的未来规划,小编给大家推荐一个IOS高级交流群:458839238 里面可以与大神一起交流并走出迷 ...
最新文章
- iOS开发者帐号申请指南
- 淘宝的人工封IP技术真好玩
- oracle全文索引的简单配置
- CF 287(div 2) B Amr and Pins
- Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好...
- ctf(pwn)栈溢出介绍
- 企业文件服务器资源管理方案
- P6076-[JSOI2015]染色问题【组合数学,容斥】
- 为什么要设置环境变量,环境变量有什么用?
- Python是最好的编程语言,Locust是最好的压测工具,不服来辩!
- linux 防火墙安装在哪,Linux下Shorewall防火墙安装和配置
- Spark运行WordCount例子
- 机器学习导论--1.机器学习理论基础详解
- Nachi机器人TCP通讯
- 学计算机cpu重要还是显卡重要,电脑玩游戏CPU重要还是显卡更重要?
- 3C和CE认证的区别
- vue项目中实现输入框防抖功能
- 2020第二届长安杯
- Maven构建docker镜像并打包推送到远程私有仓库
- Linux基础命令之tar解压缩详解
热门文章
- MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)
- 服务器怎么虚拟化内存,服务器虚拟化内存大小
- 2021 阿里云容器服务年度盘点:企业级容器应用变化和技术趋势观察
- Dubbo3 Triple 协议简介与选型思考
- 您有一份阿里云云原生直播攻略待查收
- tensorflow环境下的识别食物_Tensorflow object detection API 搭建属于自己的物体识别模型——环境搭建与测试...
- oracle异常如何处理,ORACLE异常处理总结
- python高维向量的可视化_Tensorboard教程:高维向量可视化
- c# 通过字体对话框获取字体名称和字体大小_PS插件神器 :fonTags,超好用的PS字体管理插件(附安装方法)
- vmware虚拟机迁移到hyperv_ProxmoxVE 之 V2V迁移(vmware-PVE)