最近利用业余时间终于把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核心动画学习整理相关推荐

  1. iOS 核心动画 Core Animation浅谈

    代码地址如下: http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVi ...

  2. iOS核心动画详解swift版----基础动画

    2019独角兽企业重金招聘Python工程师标准>>> iOS核心动画详解swift版---基础动画 创建工程,添加2个ViewController,通过rootViewContro ...

  3. iOS开发系列--让你的应用“动”起来--超详细的ios核心动画介绍

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

  4. iOS核心动画之CoreAnimation

    本文目录 一.Core Animation简介 二.Core Animation的使用步骤 三.CAAnimation 四.CAPropertyAnimation 回到顶部 一.Core Animat ...

  5. iOS核心动画Core Animation(一)

    核心动画Core Animation(一) 一.简述 Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core ...

  6. iOS核心动画以及UIView动画的介绍

    我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...

  7. iOS核心动画高级技术(十二) 性能调优

    Code should run as fast as necessary, but no faster. 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Anima ...

  8. iOS核心动画--浅析三个动画的实现

    点击打开链接 http://www.jianshu.com/p/272aa1f26c62 动画和绘图是iOS开发中非常重要的部分.我们要实现一个动效,首先就是动画解析,分析动画的路径,然后再考虑具体的 ...

  9. iOS 核心动画的变换

    很不幸,没人能告诉你母体是什么,你只能自己体会 – 骇客帝国 如果你依然在编程的世界里迷茫,不知道自己的未来规划,小编给大家推荐一个IOS高级交流群:458839238 里面可以与大神一起交流并走出迷 ...

最新文章

  1. iOS开发者帐号申请指南
  2. 淘宝的人工封IP技术真好玩
  3. oracle全文索引的简单配置
  4. CF 287(div 2) B Amr and Pins
  5. Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好...
  6. ctf(pwn)栈溢出介绍
  7. 企业文件服务器资源管理方案
  8. P6076-[JSOI2015]染色问题【组合数学,容斥】
  9. 为什么要设置环境变量,环境变量有什么用?
  10. Python是最好的编程语言,Locust是最好的压测工具,不服来辩!
  11. linux 防火墙安装在哪,Linux下Shorewall防火墙安装和配置
  12. Spark运行WordCount例子
  13. 机器学习导论--1.机器学习理论基础详解
  14. Nachi机器人TCP通讯
  15. 学计算机cpu重要还是显卡重要,电脑玩游戏CPU重要还是显卡更重要?
  16. 3C和CE认证的区别
  17. vue项目中实现输入框防抖功能
  18. 2020第二届长安杯
  19. Maven构建docker镜像并打包推送到远程私有仓库
  20. Linux基础命令之tar解压缩详解

热门文章

  1. MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)
  2. 服务器怎么虚拟化内存,服务器虚拟化内存大小
  3. 2021 阿里云容器服务年度盘点:企业级容器应用变化和技术趋势观察
  4. Dubbo3 Triple 协议简介与选型思考
  5. 您有一份阿里云云原生直播攻略待查收
  6. tensorflow环境下的识别食物_Tensorflow object detection API 搭建属于自己的物体识别模型——环境搭建与测试...
  7. oracle异常如何处理,ORACLE异常处理总结
  8. python高维向量的可视化_Tensorboard教程:高维向量可视化
  9. c# 通过字体对话框获取字体名称和字体大小_PS插件神器 :fonTags,超好用的PS字体管理插件(附安装方法)
  10. vmware虚拟机迁移到hyperv_ProxmoxVE 之 V2V迁移(vmware-PVE)