最近利用业余时间终于把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. linux下python安装到指定目录

    由于使用公司服务器时没有root权限,只能把python安装到个人文件夹下,使用源码包方式安装,这里记录一下. 1.python下载 cd到目录/users/w,在此目录下安装python.通过wge ...

  2. 关于对于IT我自己的见解以及我踩过的坑(需要认真读文章才能理解我所遇到的坑.)

    终于开始下决心写下这篇文章了. 就在写这篇总结文章的前天还是今天,我度过了我的17岁生日,正式踏入了已成年人的路程.生日那天我在想今夜必定要做件比较有意义的事,于是乎我想到两件比较可以证明自己是成年人 ...

  3. LUA脚本调用C场景,使用C API访问脚本构造的表

    LUA调用C lua解析中集成了一些系统服务, 故脚本中可以访问系统资源, 例如, lua脚本可以调用文件系统接口, 可以调用数学库, 但是总存在一些lua脚本中访问不到的系统服务或者扩展功能, 如果 ...

  4. Java Map 集合类简介

      作者:Jack Shirazi 了解最常用的集合类型之一 Map 的基础知识以及如何针对您应用程序特有的数据优化 Map. 本文相关下载: · Jack 的 HashMap 测试 · Oracle ...

  5. 1.1 C#简介

    大家好,这是我的C#(读做 "C sharp")学习之旅,先简介一下我了解的C#吧! 首先,说到C#,就不得不提到微软的.NET..NET是微软推出的软件开发和运行平台,允许应用程 ...

  6. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数012,polygon,多边形

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数012,polygon,多边形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换 ...

  7. POJ - 1245 Programmer, Rank Thyself

    POJ - 1245 Programmer, Rank Thyself Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d  ...

  8. Java中的4种代码块

    一.普通代码块 直接在一个方法中出现的{}就称为普通代码块,例子程序如下: public class CodeDemo01{ public static void main(String[] args ...

  9. Linux 批量改名之 rename 命令

    刚学习到 rename 命令功能很强大,比win 下的 ren 厉害啊 具体看 man rename 语法:  rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ - ...

  10. JSP页面嵌套

    项目中审批过程需要将业务表单嵌套在审批的页面中.由于业务表单很多,前台已经axjx到了本次选择的表单的地址.本来做的就是把这个链接放在审批页面上,但现在需求的就是直接把这个biz表单嵌套在审批的页面中 ...