版权所有,禁止匿名转载;禁止商业使用。
如果让自定义图层初始化上面就有画好的图形,有两种办法
重写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];