iOS CALayer应用详解(2)
参考博客:http://blog.csdn.net/hello_hwc?viewmode=list
如果你对CALayer 还没有一个清晰的理解,欢迎看一下前面的博客:
http://www.cnblogs.com/huanying2000/p/6244673.html
如果你对Layer有一定的了解 请直接看下面的文章
一 提供CALayer内容的单中方式
1>把一个图像对象直接赋值给contents属性(这是提供CALayer内容的最好方式)
2>设置delegate,让代理绘制layer的内容
3>继承CALayer 重写绘制方法 来提供layer的内容
由于上面讲了利用contents给layer提供内容 这里就不写了
http://www.cnblogs.com/huanying2000/p/6244673.html
通过设置delegate 提供内容
举例
使用displayLayer来实现
@interface ProvideLayerContentsVC()
@property (strong,nonatomic)CALayer * sublayer;
@property (strong,nonatomic)NSTimer * timer;
@property (nonatomic)NSUInteger randomState;
@end @implementation ProvideLayerContentsVC -(CALayer *)sublayer{
if (!_sublayer) {
_sublayer = [CALayer layer];
_sublayer.position = self.view.center;
_sublayer.bounds = CGRectMake(,,,);
[self.view.layer addSublayer:_sublayer];
}
return _sublayer;
}
-(NSUInteger)randomState{
_randomState = arc4random()%+;
return _randomState;
}
-(void)viewWillAppear:(BOOL)animated
{
self.sublayer.delegate = self;
self.timer = [NSTimer scheduledTimerWithTimeInterval: target:self.sublayer selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
}
-(void)displayLayer:(CALayer *)layer
{
NSString * imageName = [NSString stringWithFormat:@"image%lu.jpg",(unsigned long)self.randomState];
layer.contents = (id)[UIImage imageNamed:imageName].CGImage;
}
@end
这段代码的的功能是每隔一秒钟,随机更换layer的图片
使用draw:inContext实现自定义重新绘制
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path,NULL,,,,,M_PI*, YES);
CGContextBeginPath(ctx);
CGContextAddPath(ctx,path);
CGContextSetLineWidth(ctx, );
CGContextStrokePath(ctx);
CFRelease(path);
}
二 Layer Tree
Layer Tree分为三种,Model Layer Tree,Presentation Tree,Render Tree
其中,Render Tree为CoreAnimation私有的,是CoreAnimation具体实现使用的私有Tree,这里不做讨论。
Model Layer Tree:存储的是模态对象,也是我们通常处理的对象,比如layer.position = CGPointMake(10.0,10.0)修改的就是Model Layer Tree
Presentation Tree:存储的是正在执行的动画的当前状态,是个动态的树,由这个树来获取当前动画运行到哪里。
这两点对后续Core Animation的深入理解很重要。
上述三种Tree的对应关系如下图

iOS CALayer应用详解(2)的更多相关文章
- iOS CALayer应用详解
跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents 一 CALayer是什么? Layers是绘图和动画的基础, L ...
- 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )
原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...
- iOS中-Qutarz2D详解及使用
在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...
- iOS开发——Block详解
iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...
- iOS开发:详解Objective-C runTime
Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...
- iOS应用开发详解
<iOS应用开发详解> 基本信息 作者: 郭宏志 出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...
- 了解iOS消息推送一文就够:史上最全iOS Push技术详解
本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...
- iOS开发者证书-详解
iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...
随机推荐
- h5engine造轮子
基于学习的造轮子,这是一个最简单,最基础的一个canvas渲染引擎,通过这个引擎架构,可以很快的学习canvas渲染模式! 地址:https://github.com/RichLiu1023/h5en ...
- 中文分词工具探析(一):ICTCLAS (NLPIR)
1. 前言 ICTCLAS是张华平在2000年推出的中文分词系统,于2009年更名为NLPIR.ICTCLAS是中文分词界元老级工具了,作者开放出了free版本的源代码(1.0整理版本在此). 作者在 ...
- 游戏启示录 关于Update的相关问题
游戏启示录 关于Update的相关问题 这里说的Update是指的游戏的主循环.一般情况下.为了程序的方便控制我们一般只会有一个主循环.所有的游戏逻辑都会在这一个循环中完成.(额,其实这么做有点浪费. ...
- [Android下载]北京新版小学英语三年级上册点读手机软件
小学英语三年级上册点读软件.根据2014年北京教改版教材编写,发音标准.实现点读功能.点到哪里读到哪里.哪里不会点哪里!北京教育科学研究院编写,北京出版社出版.ISBN:9787200108781 ...
- 【原创】C#模拟Post请求,正文为json数据的代码参考
由于之前一直在做键值对post数据的提交,没遇到过json正文的提交,遇到的问题截图: 对于此种情况的post,我用 谷歌插件 PostMan 模拟试了下成功了,截图如下: Postman插件在你选择 ...
- 在docker容器中vi指令找不到
在使用docker容器时,有时候里边没有安装vi,敲vi命令时提示说:vi: command not found,这个时候就需要安装vi,可是当你敲apt-get install vi命令时,提示: ...
- 【译】Core Java Questions and Answers【1-33】
前言 译文链接:http://www.journaldev.com/2366/core-java-interview-questions-and-answers Java 8有哪些重要的特性 Java ...
- php函数获取真实客户端IP地址
function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (isset($_SERVER["HTTP_X_FORWAR ...
- 来玩Play框架02 响应
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我上一章总结了Play框架的基本使用.这一章里,我将修改和增加响应. HTTP协议 ...
- PowerDesigner 常用设置
1.使用 JDBC 方式连接 Oracle 逆向生成数据库 PDM 使用 ODBC 方式连接 Oracle 数据库可以借鉴这位兄弟的博客:http://www.cnblogs.com/clivehua ...