84-CALayer
来源:互联网 发布:拟态防御技术 知乎 编辑:程序博客网 时间:2024/04/27 05:22
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];
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];
0 0
- 84-CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- instruments
- Java堆栈的区别
- POJ 2584-T-Shirt Gumbo(网络流_最大流)
- linux永久启动内核ipv6包转发,并立即生效
- POJ3615 Cow Hurdles【Floyd】
- 84-CALayer
- 磁性传感器的应用
- 中国菜系
- 85-CZLayer的形变(平移,缩放,KVC缩放,旋转)
- 分解质因数
- Emacs 构建 Tabbar
- 86-Core Animation 核心动画
- 蓝桥杯 基础练习 字母图形
- 关于PWM模式