84-CALayer

来源:互联网 发布:拟态防御技术 知乎 编辑:程序博客网 时间:2024/04/27 05:22
CALayer

1.什么CALayer
1>在创建UIView对象时UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
@property(nonatomic,readonly,retainCALayer *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(100100100100);

//设置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(300300);
//设置圆角
_layer.cornerRadius=50;
//设置边框宽度和颜色
_layer.borderWidth=2;
_layer.borderColor=[UIColor blueColor].CGColor;
//设置背景颜色(背景色渐变)
_layer.backgroundColor=[UIColor  blueColor].CGColor;
//设置bounds(缩放)
_layer.bounds=CGRectMake(00200200);

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

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

2>关闭默认的隐式动画效果
[
CATransaction begin];
[
CATransaction setDisableActions:YES];
_layer.position = CGPointMake(1010);
[
CATransaction commit];
0 0
原创粉丝点击