我有自己的极简视图类,代码如下:
- (void) awakeFromNib
{
NSLog(@"awakeFromNib!");
[self.layer setDelegate:self];
[self.layer setFrame:CGRectMake(30, 30, 250, 250)];
self.layer.masksToBounds = YES;
self.layer.cornerRadius = 5.0;
self.layer.backgroundColor = [[UIColor redColor] CGColor];
[self setNeedsDisplay];
}
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
NSLog(@"drawing!");
}
我能看到一个红色、圆角矩形的图层,但是drawLayer:inContext方法并没有被调用。我该怎么办?
编辑:根据苹果文档:
您可以绘制图层的内容,或者更好地将设置图层内容图像封装到一个实现以下方法之一的委托类中:displayLayer:或drawLayer:inContext:。
实现委托方法来绘制内容不会自动导致该图层使用该实现进行绘制。相反,您必须显式告诉图层实例重新缓存内容,要么通过向其发送setNeedsDisplay或setNeedsDisplayInRect:消息,要么通过将其needsDisplayOnBoundsChange属性设置为YES。
还有:
drawLayer:inContext: 如果定义了,则由drawInContext:的默认实现调用。