重點:
以自定義CALayer的方式實現繪圖
利用坐標系縮放比例翻轉圖像
步驟:創(chuàng)建空應用掉丽、創(chuàng)建Controller、創(chuàng)見視圖地熄、創(chuàng)建自定義CALayer
- 在MainViewController中引入自定義視圖,并實例化視圖 芯杀,添加到MainViewController端考。
- (void)viewDidLoad {
[super viewDidLoad];
MyView *myView = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
[myView setBackgroundColor:[UIColor lightGrayColor]];
[self.view addSubview:myView];
}
2.在MyView自定義視圖中雅潭,實例化CALayer , 設置顏色却特、位置扶供、大小
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog(@"initView");
MyLayer *myLayer = [MyLayer layer];
[myLayer setBounds:self.bounds];
[myLayer setPosition:CGPointMake(100, 100)];
[myLayer setBackgroundColor:[UIColor redColor].CGColor];
[self.layer addSublayer:myLayer];
self.myLayer = myLayer;
[self.myLayer setNeedsDisplay];
}
return self;
}
注意:一定要調用[self.myLayer setNeedsDisplay];否則無法繪圖。
3.在CALayer中繪制裂明。
- (void)drawInContext:(CGContextRef)ctx
{
//來繪制圖層
//提示:在形變坐標系前椿浓,記得保存坐標系,使用后再恢復坐標系闽晦。
CGContextSaveGState(ctx);
//繪制頭像
//1> 可以利用 在繪圖的時候扳碍,可以利用上下文的形變。
//2> 可以利用 形變屬性的縮放實現圖片的反轉(1仙蛉,-1)
//3> 可以利用平移恢復位置(向下平移坐標系)
//a.翻轉
CGContextScaleCTM(ctx, 1.0, -2.0);
//b.平移
CGContextTranslateCTM(ctx, 0, -self.bounds.size.height);
UIImage *image = [UIImage imageNamed:@"image.jpg"];
CGContextDrawImage(ctx, CGRectMake(50, 50, 100, 100), image.CGImage);
CGContextRestoreGState(ctx);
//畫青色的園
CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
CGContextSetRGBFillColor(ctx, 0.0, 1.0, 1.0, 1.0);
CGContextDrawPath(ctx, kCGPathFill);
NSLog(@"draw In context");
//畫藍色的園
CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 100, 100));
CGContextSetRGBFillColor(ctx, 1.0, 0.0, 1.0, 1.0);
CGContextDrawPath(ctx, kCGPathFill);
}
最后效果:
圖像默認是倒過來的笋敞。所以要旋轉,平移之后將圖片擺正荠瘪。
注意:
1.如果使用自定義圖層繪圖時夯巷,uiview本身的DrawRect方法內的繪圖結果將被layer的繪圖結果覆蓋。
2.如果使用CALayer繪圖巧还,就不要再寫drawRect方法