最近利用业余时间终于把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的目的是为了高效生成许多相似的图层。它会绘制一个或多个图层的子图层,并在每个复制体上应用不同的变换。此处直接搬出运行代码

 //需要实例化的个数
int numofInstance = ;
//动画时长
CGFloat duration = 1.0f;
//创建repelicator对象
CAReplicatorLayer *repelicator = [CAReplicatorLayer layer];
//设置其位置
repelicator.frame = self.view.bounds;
//需要生成多少个相同实例
repelicator.instanceCount = numofInstance;
//代表实例生成的延时时间;
repelicator.instanceDelay = duration / numofInstance;
//设置每个实例的变换样式
repelicator.instanceTransform = CATransform3DMakeRotation(M_PI * 2.0 / 10.0, , , ); //创建repelicator对象的子图层,repelicator会利用此子图层进行高效复制。并绘制到自身图层上
CALayer *layer = [CALayer layer];
//设置子图层的大小位置
layer.frame = CGRectMake(, , , );
//子图层的仿射变换是基于repelicator图层的锚点,因此这里将子图层的位置摆放到此锚点附近。
CGPoint point = [repelicator convertPoint:repelicator.position fromLayer:self.view.layer];
layer.position = CGPointMake(point.x, point.y - );
//设置子图层的背景色
layer.backgroundColor = [UIColor whiteColor].CGColor;
//将子图层切圆
layer.cornerRadius = ;
//将子图层添加到repelicator上
[repelicator addSublayer:layer];
//对layer进行动画设置
CABasicAnimation *animaiton = [CABasicAnimation animation];
//设置动画所关联的路径属性
animaiton.keyPath = @"transform.scale";
//设置动画起始和终结的动画值
animaiton.fromValue = @();
animaiton.toValue = @(0.1);
//设置动画时间
animaiton.duration = duration;
//设置动画次数
animaiton.repeatCount = INT_MAX;
//添加动画
[layer addAnimation:animaiton forKey:nil];

  2.CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。CAEmitterLayer看上去像是许多CAEmitterCell的容器,这些CAEmitterCell定义了一个粒子效果。下面直接上代码

 - (CAEmitterLayer *)emitter {
if (_emitter == nil) {
//创建粒子图层容器
CAEmitterLayer *layer = [CAEmitterLayer layer];
//设置发射器位置
layer.emitterPosition = self.view.center;
//设置发射器范围
layer.emitterSize = CGSizeMake(, );
//设置发射器形状
layer.emitterShape = kCAEmitterLayerLine;
//设置发射器发射模式
layer.emitterMode = kCAEmitterLayerSurface;
//设置发射器的渲染模式
layer.renderMode = kCAEmitterLayerAdditive; _emitter = layer;
}
return _emitter;
}

接着创建CAEmitterCell粒子图层并放入CAEmitterLayer容器中

 //创建粒子
CAEmitterCell *cell = [CAEmitterCell emitterCell];
//配置粒子图像
cell.contents = (__bridge id)[UIImage imageNamed:@"火焰"].CGImage;
//粒子每秒发射个数
cell.birthRate = ;
//粒子生命周期
cell.lifetime = 3.0;
//粒子旋转角度
cell.spin = M_PI / ;
//粒子颜色
cell.color = [UIColor colorWithRed:1.000 green:0.681 blue:0.178 alpha:1.000].CGColor;
//粒子衰减过程
cell.alphaSpeed -= ;
//粒子发射速度
cell.velocity = ;
//粒子发射速度可变范围,如果此处设置为10 则速度值在30 - 50 之类变动
cell.velocityRange = ;
//粒子缩放比例
cell.scaleSpeed -= ;
//cell发射角度范围
cell.emissionLongitude = ;
//cell发射偏转角度
cell.emissionRange = M_PI / ;
//将配置好的粒子放入容器中
self.emitter.emitterCells = @[cell];

  此处编写这两种效果图旨在引起各位iOS爱好者的对动画和layer层学习的兴趣,如想深入学习请点击上面链接自行学习。另外欢迎大家与笔者一起学习交流,对于只求代码者一律不回,谢谢!上述有任何错误欢迎指正!

iOS核心动画学习整理的更多相关文章

  1. IOS 动画专题 --iOS核心动画

    iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...

  2. iOS核心动画高级技巧 - 8

    iOS核心动画高级技巧 - 1 iOS核心动画高级技巧 - 2 iOS核心动画高级技巧 - 3 iOS核心动画高级技巧 - 4 iOS核心动画高级技巧 - 5 iOS核心动画高级技巧 - 6 iOS核 ...

  3. IOS 核心动画之CAKeyframeAnimation - iBaby

    - IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...

  4. iOS 核心动画 Core Animation浅谈

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

  5. iOS核心动画高级技巧之核心动画(三)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

  6. iOS核心动画高级技巧之图层变换和专用图层(二)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

  7. iOS核心动画高级技巧之CALayer(一)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

  8. iOS核心动画(专用图层篇)

    之前的文章我们了解了Core Animation中图层的一些基础知识.没有看过的传送门在此: iOS核心动画基础篇 那么在了解了这些基础知识之后,接下来进入专用图层的了解 苹果为了方便和性能,封装了几 ...

  9. iOS 核心动画

    核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...

随机推荐

  1. rsync组合inotify-tools完成实时同步[转]

    一. 什么是inotify inotify是一种强大的.细粒度的.异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件 ...

  2. windows下安装 sphinx 数据库全文搜索引擎

    此次演示的环境是:win7系统,64位,php5.4.x,apache sphinx,斯芬克斯(英语不好的同学可以直接读这个音),意狮身人面像 特点:创建索引速度快,3分钟左右能创建100万条记录的索 ...

  3. UIBezierPath用法

    前言 笔者在写本篇文章之前,也没有系统学习过贝塞尔曲线,只是曾经某一次的需求需要使用到,才临时百度看了一看而且使用最基本的功能.现在总算有时间停下来好好研究研究这个神奇而伟大的贝塞尔先生! 笔者在学习 ...

  4. Java StringBuilder 高性能用法总结

    StringBuilder 误解: 1. Java编译优化后+和StringBuilder的效果一样: 2. StringBuilder不是线程安全的,为了"安全"起见最好还是用S ...

  5. Java反射的三种实现方式

    Foo foo = new Foo(); 第一种:通过Object类的getClass方法 Class cla = foo.getClass(); 第二种:通过对象实例方法获取对象 Class cla ...

  6. Windows Server 2008 R2 辅域控制器如何升级成主域控制器

    一.实验模拟故障问题: zhuyu公司架设了一台主域控制器和一台辅域控制器,某一天,zhuyu公司的主域控制器系统崩溃,主域控制器系统也进不去. 虽然辅域控制器可以暂时代替主域控制器的普通工作,但是特 ...

  7. 产生0-9 A-Z a-z

    >题目要求: >>产生26个大写字母 >>产生26个小写字母 >>产生0-9这10个阿拉伯数字 >程序实现: package cn.fury.test; ...

  8. JQuery兼容IE6问题汇总(不断更新)

    兼容IE6真是苦逼的差事,无奈中... 逗号的问题:IE6中要去掉最后的逗号 var o={ id:1, Name:"abc", //这里的逗号一定要去掉 } HTML的结构,由于 ...

  9. require,include,require_once,include_once的区别

    最近面试时被问到,一时间还真没想到太多,仅仅回答了大概的几个,于是回来再确认一下. 以下内容为网络摘抄: ①作用及用法  可以减少代码的重复 include(_once)("文件的路径&qu ...

  10. 夺命雷公狗-----React---9--map数据的遍历

    比如我们要实现的是这种效果: 用这种方法来写,她只能写死在哪,没啥意思,所以我们定义一个数据,然后来测试下map方法对她遍历出来的数据 <!DOCTYPE html> <html l ...