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);
}