Iphone drawLayer:未调用inContext
我有一个自己的最小视图类:Iphone drawLayer:未调用inContext,iphone,core-animation,core-graphics,Iphone,Core Animation,Core Graphics,我有一个自己的最小视图类: - (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.backgr
- (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:
或绘图层:inContext:
实现委托方法进行绘图
内容不会自动更新
使用该选项绘制图层
实施相反,你必须
显式地告诉层实例
通过以下方式重新缓存内容:
发送设置需要显示或
setNeedsDisplayInRect:消息,或通过
设置其需要显示BoundSchange
属性设置为“是”
也
drawLayer:inContext:
如果已定义,则由默认实现调用
文本的类型:
决不应更改UIView图层的委托。从UIView图层特性的文档中: 警告:由于视图是图层的 代理,您不应该设置 作为其他CALayer的代理查看 对象此外,你不应该 更改此图层的代理 如果要在视图中进行自定义绘图,只需覆盖drawRect:方法 如果确实要使用图层,则需要创建自己的图层:
UIView *myView = ...
CALayer *myLayer = [CALayer layer];
myLayer.delegate = self;
[myView.layer addSublayer:myLayer];
在这两种情况下,第一种情况下需要在视图上调用setNeedsDisplay,第二种情况下需要在自定义图层上调用setNeedsDisplay。您从不直接调用drawRect:或drawLayer:inContext:,当您调用setNeedsDisplay时会自动调用它们。使用
[self.layer setNeedsDisplay]代码>
而不是
[自设置需要显示]代码>
它是视图。层
,而不是视图