参考博客: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)的更多相关文章

  1. iOS CALayer应用详解

    跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents 一 CALayer是什么? Layers是绘图和动画的基础,  L ...

  2. 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )

    原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...

  3. iOS中-Qutarz2D详解及使用

    在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...

  4. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  5. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  6. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  7. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  8. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  9. iOS开发者证书-详解

    iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...

随机推荐

  1. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  2. Android属性动画

    这几天看郭神的博客 Android属性动画完全解析(上),初识属性动画的基本用法之后,我自己突然想实现一种动画功能,就是我们在携程网.阿里旅行等等手机APP端买火车票的时候,看到有选择城市,那么就有出 ...

  3. Gatekeeper Pattern 把关(守门人)模式

    Protect applications and services by using a dedicated host instance that acts as a broker between c ...

  4. 微信企业号开发(1)WebAPI在回调模式中的URL验证

    微信回调模式的官方文档. 开发语言:C#(微信相关功能代码可以从官网下载) 首先,必须要明确几个参数,这几个参数在微信企业号中,每次调用都会使用到. 1.msg_signature:签名(已加密,加密 ...

  5. ASP.NET用QQ,网易发送邮件以及添加附件

    教程:ASP.NET用QQ,网易发送邮件以及添加附件 这是我用QQ邮箱出现的异常: 命令顺序不正确. 服务器响应为:Error: need EHLO and AUTH first !无法从传输连接中读 ...

  6. 让linux开机默认开启小键盘

     linux默认开机不开启数字键盘numberlock,每次输入开机密码还得劳烦自己去点亮指示灯,让此灯开机自动点亮,需要一个软件才行,就是numlockx了,可以通过yum安装:yuminstall ...

  7. 数据结构:二叉树 基于list实现(python版)

    基于python的list实现二叉树 #!/usr/bin/env python # -*- coding:utf-8 -*- class BinTreeValueError(ValueError): ...

  8. Redis(li)

    一.Redis基础介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset ...

  9. 浅谈Slick(3)- Slick201:从fp角度了解Slick

    我在上期讨论里已经成功的创建了一个简单的Slick项目,然后又尝试使用了一些最基本的功能.Slick是一个FRM(Functional Relational Mapper),是为fp编程提供的scal ...

  10. CDN模式介绍

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }        CDN(content delivery networ ...