1.先来介绍下layer的属性
- (void)initImageView{
//初始化imageview
UIImageView *imageview = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.jpg"]];
//设置iamge的位置为居中
imageview.frame = CGRectMake((kScreenWidth-200)/2, (kScreenHeight-200)/2, 200, 200);
//添加到view中
[self.view addSubview:imageview];
//图层
//1.设置阴影颜色为黄色 类型转换为CGColor
imageview.layer.shadowColor = [UIColor yellowColor].CGColor;
//2.设置阴影偏移大小
imageview.layer.shadowOffset = CGSizeMake(10, 10);
//3.设置阴影的不透明度
imageview.layer.shadowOpacity = 0.5;
//4.设置圆角的大小
imageview.layer.cornerRadius = 20;//设置圆角半径为10
//强制内部的所有子层支持圆角效果 使用后就不显示阴影效果
imageview.layer.masksToBounds = YES;
//5.设置边框
imageview.layer.borderWidth = 5;
imageview.layer.borderColor = [UIColor redColor].CGColor;
//6.设置旋转,缩放 沿着xy轴顺时针旋转 四分之π
imageview.layer.transform = CATransform3DMakeRotation(M_PI_4, 1, 1, 0);
//沿着z轴顺时针旋转 四分之π
// imageview.layer.transform = CATransform3DMakeRotation(M_PI_4, 1, 1, 0);
//7.设置缩放 x轴缩放0.5
// imageview.layer.transform = CATransform3DMakeScale(0.5, 0.5, 0.5);
2.如何创建layer
//通过类方法创建 包含在QuartzCore框架中 这个框架是跨平台的 需要在头文件中添加以及Link FrameWork处添加
CALayer *layer = [CALayer layer];
//设置layer图层的属性
//设置背景颜色 灰色
layer.backgroundColor = [UIColor grayColor].CGColor;
//设置layer bounds
layer.bounds = CGRectMake(0, 0, 100, 100);
/*
*position设置CALayer在父图层中的位置 以父图层的左上角为原点(0,0)
*anchorPoint 锚点(定位点) 决定CALayer的哪个点在position属性所指的位置,以自己的左上角为原点(0,0) 默认值(0.5,0.5) x~y取值是0-1 右下角(1,1)
*/
//设置layer的position
layer.position = CGPointMake(200, 200);
//设置layer的锚点
layer.anchorPoint = CGPointMake(0, 1);
//设置layer的内容
layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"1.jpg"].CGImage);
//添加图层
[self.view.layer addSublayer:layer];
3.自定义图层
3.1建立子类继承于父类CALayer
#import "kLayer.h"
@implementation kLayer
//实现drawInContext方法
- (void)drawInContext:(CGContextRef)ctx{
// //设置颜色
// CGContextSetRGBFillColor(ctx, 1, 0, 0, 0.5);
// //在视图上画一个圆形 宽和高相等的椭圆
// CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
// //将圆形画到视图上
// CGContextFillPath(ctx);
}
@end
在viewcontroller.m中实现如下方法
- (void)viewDidLoad {
[super viewDidLoad];
[self initLayer];
}
//初始化自定义图层
- (void)initLayer{
kLayer *layer = [kLayer layer];
//设置图层的大小
layer.bounds = CGRectMake(0, 0, 200, 200);
layer.anchorPoint = CGPointMake(0, 0);
//第二种方法 代理
layer.delegate = self;//不用协议 任何对象都能成为代理
[layer setNeedsDisplay];//必须调用这个方法 layer才会显示
//添加图层
[self.view.layer addSublayer:layer];
}
通过代理实现的 需要实现这个代理的方法
#pragma mark layer代理方法
//在这个代理方法中 可以绘制图层
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
//设置颜色
CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);
//在视图上画一个圆形 宽和高相等的椭圆
CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
//将圆形画到视图上
CGContextFillPath(ctx);
}