您的位置:首页 > 其它

CALayer 的简单使用

2016-08-25 00:00 134 查看
CALayer是被定义在QuartzCore中,因此想要使用CALayer就要导入该框架,并在代码前导入框架的头文件

一,什么是CALayer

1,在创建UIView对象时,UIView内部会自动创建一个层(CALayer对象,通过UIView的layer属性可以访问这个层。

2,当UIView需要显示在屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后。系统将会层拷贝在屏幕上,于是完成UIView的显示。

3,换句话说,UIView不具备显示功能,是它内部的层才有显示功能。

二,通过CALyer修改UIView控件的界面属性

1,设置阴影

self.image.layer.shadowColor = [UIColorgrayColor].CGColor; //设置阴影颜色
self.image.layer.shadowOffset = CGSizeMake(10, 10); //设置阴影偏移大小
self.image.layer.shadowOpacity = 0.5; //设置阴影的不透明度

2,设置圆角

self.image.layer.cornerRadius = 5;   //设置圆角半径
self.image.layer.masksToBounds =YES; //强制内部子类支持圆角效果

3,设置边框

self.image.layer.borderColor = [UIColorredColor].CGColor; //设置边框颜色
self.image.layer.borderWidth = 1;  //设置边框宽度

4,设置旋转

//利用transform属性可以设置旋转、缩放等效果
//M_PI_4表示四分之π,顺时针旋转45°
//后面的(0, 0, 1)表示Z轴这个向量,修改这个向量可以做一些三维旋转效果,你可以随便改个值试一下,比如(1, 1, 1)
//总体的意思是layer会绕着Z轴顺时针旋转45°,也就是在x、y平面进行旋转
self.image.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);


三,添加一个新的层

CALayer *myLayer = [[CALayeralloc] init];
myLayer.bounds = CGRectMake(0, 0, 100, 100);//设置层的高度和宽度
myLayer.position = CGPointMake(100, 100); //设置层的位置
myLayer.backgroundColor = [UIColorredColor].CGColor; //设置层的背景颜色
myLayer.contents = (id)[UIImageimageNamed:@""].CGImage; //设置需要显示的图片
myLayer.cornerRadius = 10;   //设置层的圆角半径
myLayer.masksToBounds = YES; //如果设置了图片,需要设置了才有圆角效果

[self.image.layeraddSublayer:myLayer]; //添加层到View的layer中


四,UIView和CALayer的选择

1,CALayer不能处理用户触摸事件,而UIView可以

2,如果需要用户进行交互,使用UIView.如果不需要,用UIView和CALayer都可以

3, CALayer的性能会高一些,因为它少了事件处理功能,更加轻量级。

4, UIView可以通过subviews属性访问所有的子视图,CALayer可以通过sublayer属性访问所有子层

五,UIView和CALayer的关系

1, UIView可以通过superview属性访问父视图,CALayer可以通过super layer属性访问父视图

2,如果两个UIView是父子关系,那么他们内部的CAlayer也是父子关系

六,CALayer的属性

1,每个UIView内部都关联着一个CALayer,我们称这个Layer为Root Layer(根层).

2,对非根层的部分属性进行修改时,默认会自动产生一些动画,如bounds会产生缩放动画;positon会产生平移动画。

3,position可以用来设置CALayer在父层中的位置,它是以父层左上角为坐标原点(0,0);

4,anchorPoint称之为“定位点”,他决定这CALayer身上的那个点会在position属性所指的位置,它的x、y取值范围是0-1,默认(0.5,0.5);

七,自定义CALayer

1,对创建一个CALayer的子类,然后覆盖drawinContext:方法,使用Quartz2D API绘制

2,不论采用哪种方式自定义层,都必须调用CALayer的setNeedsDisplay方法才能正常绘图

/**
*  类名 myLayer
*  绘制一个实心三角形
*  @param ctx
*/

-(void)drawinContext:(CGContextRef)ctx{
CGContextSetRGBFillColor(ctx, 0, 0, 0, 1); //设置为蓝色
CGContextMoveToPoint(ctx, 50, 0);  //设置为起点
CGContextAddLines(ctx, 0, 100); //从(50,0)链接到(0,100)
CGContextAddLines(ctx, 100, 100);
CGContextClosePath(ctx);  //合并路径,连接起点和终点

CGContextFillPath(ctx);  //绘制路径

}

//使用方式

myLayer *layer = [myLayer layer];
layer.bounds = CGRectMake(0, 0, 100, 100); // 设置层的宽高
layer.position = CGPointMake(100, 100); // 设置层的位置
[layer setNeedsDisplay]; // 开始绘制图层

[self.view.layer addSublayer:layer];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: