【iOS开发-图层】自己定义图层的两种方式
想要自己定义图层,仅仅须要构建一个类继承CALayer方法
假设让自己定义图层初始化上面就有画好的图形。有两种办法
重写drawInContext方法
自己定义的图层以下的方法。然后必须自己定义的图层对象显示调用
[layer setNeedsDisplay]然后才会调用这种方法;
自定图层文件
- (void)drawInContext:(CGContextRef)ctx {
CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);//设置红色
CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 50));//画圆
CGContextFillPath(ctx);
}
控制器文件
TestLayer *layer = [TestLayer layer];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.position = CGPointMake(100, 100);
layer.anchorPoint = CGPointMake(0, 0);
layer.backgroundColor = [UIColor blueColor].CGColor;
layer.cornerRadius = 10;
[layer setNeedsDisplay];//必须要显示调用这种方法。才会调用上面的那个方法
[self.view.layer addSublayer:layer];
使用代理
首先代理控制器不须要遵循协议。由于这个协议是一个分类。全部的NSObject都实现了
控制器实现代理的方法
#pragma marks -实现代理的方法
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 50));
CGContextFillPath(ctx);
}
调用
TestLayer *layer = [TestLayer layer];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.position = CGPointMake(100, 100);
layer.anchorPoint = CGPointMake(0, 0);
layer.backgroundColor = [UIColor blueColor].CGColor;
layer.cornerRadius = 10;
layer.delegate = self;
[layer setNeedsDisplay];//必须显示调用,不然也不会调用代理的方法
[self.view.layer addSublayer:layer];