84-CALayer

CALayer

1.什么CALayer
1> 在创建UIView对象时 UIView内部会自动创建一个图层(即 CALayer 对象),通过UIView的layer属性可以访问这个层
@property ( nonatomic , readonly , retain CALayer  *layer; 
2>结论: UIView本身不具备显示的功能,是它内部的层才有显示功能,而它内部的层就是CALayer对象

2.在xcode6之前要导入包(QuartzCore.framework)
项目—>Build —>Link Bnary With Libraries (1 item) —>点击添加(+)—>在搜索框中输入:Quart

3.CALayer的基本使用

1>UIView中layer的使用

设置阴影
//Opacity不透明度:默认是0透明,1不透明
 
_redView . layer . shadowOpacity = 1 ;
    
设置阴影圆角
_redView . layer . shadowRadius = 30 ;

设置阴影颜色
_redView . layer . shadowColor =[ UIColor   yellowColor ]. CGColor  ;
    
平移    
_redView . layer . shadowOffset = CGSizeMake (- 20 , - 20 );

设置圆角半径
//当前view的宽度/2,就是圆形
_redView . layer . cornerRadius = _redView . bounds . size . width / 2 ;
    
设置边框
//默认边框颜色是黑色

_redView . layer . borderWidth = 10 ;

设置边框颜色
_redView . layer . borderColor =[ UIColor   whiteColor ]. CGColor ;

2> UIimageView中layer使用
特殊性: View的主层是layer,UIimageView图片没有添加到主层上,而是存放在主层的contents上,
    因此设置imageView的圆角时候要强制内部的所有子层支持圆角效果


1>设置的圆角半径只会影响主层(layer)
_imageView . layer . cornerRadius = 50 ;

2>超出主层的部分全部裁剪,可以看做是强制内部的所有子层支持圆角效果
_imageView . layer . masksToBounds = YES ;

设置边框
_imageView . layer . borderWidth = 1 ;
_imageView . layer . borderColor =[ UIColor   whiteColor ]. CGColor ;

4.CALayer的使用经验
给图层(layer)添加颜色都是CGColor类型,使用时要通过.CGColor转换
例如:设置背景颜色:
_redView . layer . shadowColor =[ UIColor   yellowColor ]. CGColor  ;

5.CALayer画圆和Quart画圆的区别
Quart2D在图片上画圆,layer在图层上画圆

6.自定义图层( CALayer )

//创建图层
CALayer  *layer=[ CALayer   layer ];

//设置背景颜色
layer.
backgroundColor =[ UIColor   redColor ]. CGColor ;

//设置layer尺寸
layer.
frame = CGRectMake ( 100 100 100 100 );

//设置layer的内容(必须要传一个CGImage的类型)
layer.
contents =( id )[ UIImage   imageNamed : @"阿狸头像" ]. CGImage ;

//添加到控制器的View的layer上
[
self . view . layer   addSublayer :layer];

7.CALayer可以实现跟UIView一样的界面效果,他们的区别和使用时机
区别: UIView可以进行触摸事件,ALayer不能处理用户的触摸事件
使用时机: 将要显示的界面需要跟用户交互的时候用UIView,不需要交互的时候二者皆可
        但是CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级

8.CALayer中使用CGImageRef和CGColorRef而不是使用UIImage、UIColor的原因是什么
1> CALayer是定义在QuartzCore框架中,可以跨平台,在iOS和Mac OS X上都能使用,因此使用同样支持跨平台的的CGImageRef、CGColorRef两种数据类型
one: CGImageRef、CGColorRef,定义在CoreGraphics框架中,可以跨平台
two: UIColor、UIImage是定义在UIKit框架中的,UIKit只能在iOS中使用

2> 为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

9.CALayer的两个重要属性position和anchorPoint

1> position :设置CALayer在父层中的位置(以父层的左上角为原点[0,0])

2> achorPoint:锚点,定位点
one: 决定CALayer身上的哪个点会在position属性所指的位置
two: 以自己的左上角为原点[0,0]
three: x,y取值范围是0-1,默认值是(0.5,0.5)

9.CALayer的隐式动画
1> 根层 : 每一个UIView内部都默认关联着一个CALayer,称这个Layer为Root Layer(根层)
注意: 根层没有没有隐式动画

2>什么是隐式动画
one: 当对非根层的Layer属性进行修改时,默认会自动产生一些动画效果,就是隐式动画
two: 所有的非根层(手动创建的Layer),都存在隐式动画
3>可动画属性
one: Layer进行修改可以支持隐式动画的属性,称为Animatable Properties(可动画属性)
two: 去属性的头文件看,有Animatable描述的都可以设置隐式动画

4>常见的可动画属性
4常见的Animatable Properties:
//设置位置(平移)
_layer . position = CGPointMake ( 300 300 );
//设置圆角
_layer . cornerRadius = 50 ;
//设置边框宽度和颜色
_layer . borderWidth = 2 ;
_layer . borderColor =[ UIColor   blueColor ]. CGColor ;
//设置背景颜色(背景色渐变)
_layer . backgroundColor =[ UIColor    blueColor ]. CGColor ;
//设置bounds(缩放)
_layer . bounds = CGRectMake ( 0 0 200 200 );

10.隐式动画的事务 CATransaction
默认每个隐式动画都会包装到一个事务里面,可以通过此事务设置动画时长和默认的隐式动画效果

1>设置动画时长
[
CATransaction   setAnimationDuration : 1 ];
注意 :在执行隐式动画之前设置动画时长才有作用

2>关闭默认的隐式动画效果
[
CATransaction   begin ];
[
CATransaction   setDisableActions : YES ];
_layer . position  =  CGPointMake ( 10 10 );
[
CATransaction   commit ];
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院