最近利用业余时间终于把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. html基本的内容

    1.表现各标签的特征 <img>中的src(source)即为属性 属性都是以"属性名 = 值"的形式出现 属性的值建议用引号括起来 属性建议均以键值对的形式括起来 一 ...

  2. 转: Linux磁盘扩容

    from:https://www.rootusers.com/how-to-increase-the-size-of-a-linux-lvm-by-expanding-the-virtual-mach ...

  3. App_global.asax.pdb: 另一个程序正在使用此文件,进程无法访问。

    页面修改后,浏览报错,信息如下. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0042: 创建调试信息文件“ ...

  4. Java提高篇——Java实现多重继承

    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...

  5. WEB压力测试工具Pylot试用

    Pylot介绍 转载自[http://www.freehao123.com/pylot-web/] 为了能够准确地评估网站服务器对网络流量的承受能力,我们一般会采取模拟网站用户访问,通过不断地增加并发 ...

  6. Java基础之扩展GUI——使用字体对话框(Sketcher 5 displaying a font dialog)

    控制台程序. 为了可以选择系统支持的字体,我们定义了一个FontDialog类: // Class to define a dialog to choose a font import java.aw ...

  7. Leetcode: Path Sum III

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  8. Adobe CS6 全系列官方下载地址 (迅雷无效) Win Mac

    https://helpx.adobe.com/x-productkb/policy-pricing/cs6-product-downloads.html CS6 Design & Web P ...

  9. Pyhton 学习总结 20 :执行系统命令

    在Python中执行系统命令有os.system().os.popen().commands.getstatusoutput().subprocess.Popen等     1.os.system() ...

  10. 处理 httprequest post 编码问题

    site :http://www.cnblogs.com/artwl/archive/2012/03/07/2382848.html 在JavaScript中推荐的做法是用encodeURI对URI的 ...