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的目的是为了高效生成许多相似的图层。它会绘制一个或多个图层的子图层,并在每个复制体上应用不同的变换。此处直接搬出运行代码
//需要实例化的个数
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核心动画学习整理的更多相关文章
- IOS 动画专题 --iOS核心动画
iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...
- iOS核心动画高级技巧 - 8
iOS核心动画高级技巧 - 1 iOS核心动画高级技巧 - 2 iOS核心动画高级技巧 - 3 iOS核心动画高级技巧 - 4 iOS核心动画高级技巧 - 5 iOS核心动画高级技巧 - 6 iOS核 ...
- IOS 核心动画之CAKeyframeAnimation - iBaby
- IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...
- iOS 核心动画 Core Animation浅谈
代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...
- iOS核心动画高级技巧之核心动画(三)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
- iOS核心动画高级技巧之图层变换和专用图层(二)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
- iOS核心动画高级技巧之CALayer(一)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
- iOS核心动画(专用图层篇)
之前的文章我们了解了Core Animation中图层的一些基础知识.没有看过的传送门在此: iOS核心动画基础篇 那么在了解了这些基础知识之后,接下来进入专用图层的了解 苹果为了方便和性能,封装了几 ...
- iOS 核心动画
核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...
随机推荐
- 通过 Chrome Workspace 调试本地项目(修改样式时及时保存)
打开 DevTools 开发者工具[F12]中的 Sources 面板,在面板左侧右键选择「Add folder to workspace」,选择添加的文件夹. 添加好后,右键一个文件,选择「Map ...
- Java 创建过滤器 解析xml文件
今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则:不需要导入任何jar包 ActionFilter过滤器类: package accp.com.xh.ut ...
- Hibernate - lazy, fetch, inverse, cascade
Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了"inverse=false"(默认),那么那一 ...
- Java提高篇——Java实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...
- JAVA多线程实现的三种方式
JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...
- Java中String类的方法及说明
String : 字符串类型 一. String sc_sub = new String(c,3,2); // String sb_copy = new String(sb) ...
- C++之路进阶——codevs1281(Xn数列)
1281 Xn数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你6个数,m, a, c, x0, n, ...
- oauth协议
微博 : 新浪 腾讯 OAuth 新浪微博 APP开发 步骤:1.注册新浪开发者账号 获取以下信息 client_id 123456 标示应用身份的 唯一的 有的也叫App Key sec ...
- css字体样式(Font Style),属性
css字体样式(Font Style),属性 css字体样式(Font Style)是网页中不可或缺的样式属性之一,有了字体样式,我们的网页才能变得更加美观,因此字体样式属性也就成为了每一位设计者 ...
- C#.Net 中的 new 的几个用法
之前面试的时候,有人问过我这个问题,当时自己只记得两种.后来上msdn看了下,发现有三种,第三种用法基本没怎么用过 这里先贴出来: 三种用法如下: 在 C# 中,new 关键字可用作运算符.修饰符或约 ...