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 ...
随机推荐
- jwt refresh token
$app->post('auth/refresh-token', ['middleware' => 'jwt.refresh', function() { try { $old_token ...
- Flink - Checkpoint
Flink在流上最大的特点,就是引入全局snapshot, CheckpointCoordinator 做snapshot的核心组件为, CheckpointCoordinator /** * T ...
- Android中Parcelable接口用法
from: http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html Interface for classes wh ...
- 论MySQL的监控和调优
懂PHP的人一般都懂MySQL这一点不假,大多数书籍里也是这样,书中前面讲PHP后面到数据库这块就会讲到MySQL的一些知识,前几年MySQL一直是PHP书籍的一部分,后来开始从国外翻译了一些专门讲述 ...
- JMeter学习-007-JMeter 断言实例之一 - 响应断言
之前的文章中已经对如何录制 web 的请求进行了详细的描述,敬请参阅:JMeter学习-004-WEB脚本入门实战 同时,我们的手机应用(例如:京东.天猫.唯品会.携程.易迅 等等 App)所发出的请 ...
- KingBlog记录
本片文章其他人可能看不懂,只是我做记录用,不要见怪 KingBlogCMS总结 开发工具: VS2012+SOLServer2008+IIS 开发语言: ASP.NET.Html.js.JQ 第三方: ...
- Oracle 触发器的简单命令
-- 创建触发器的基本命令 create or replace trigger td after delete on ss begin dbms_output.put_line('删除成功'); en ...
- VS 创建虚拟目录失败,映射到其他文件夹!
今天,改一哥们项目!立马,问了一下原因.支支吾吾的气死LZ! 算了,就不信自己琢磨不出来!哼 找了半天,坑爹的是在Web.csproj文件中! 用txt打开,发现这个东东! <UseIIS> ...
- LaTeX插入图表方法 Lists of tables and figures
Lists of tables and figures A list of the tables and figures keep the information organized and prov ...
- js实现发送短信验证码后的倒计时功能(无视页面刷新)
[1].[代码] 这是页面上的发送验证码按钮 跳至 [1] [2] [3]<input id="second" type="button" value=& ...