Iphone CATiledLayer上的CALayer,drawLayer:从未调用过inContext
我有一个UIView,它使用CATiledLayer显示PDF页面,现在我想在TiledLayer上添加另一个CALayer来绘制一些注释,请参见下面的代码Iphone CATiledLayer上的CALayer,drawLayer:从未调用过inContext,iphone,objective-c,ios,cocoa-touch,ipad,Iphone,Objective C,Ios,Cocoa Touch,Ipad,我有一个UIView,它使用CATiledLayer显示PDF页面,现在我想在TiledLayer上添加另一个CALayer来绘制一些注释,请参见下面的代码 + (Class)layerClass { return [TiledLayer class]; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) {
+ (Class)layerClass
{
return [TiledLayer class];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
TiledLayer *tiledLayer = (id)self.layer;
tiledLayer.backgroundColor = [UIColor whiteColor].CGColor;
NSAssert([tiledLayer isKindOfClass:[TiledLayer class]], @"self.layer must be CATiledLayer");
drawingLayer = [CALayer layer];
drawingLayer.frame = frame;
//its crashing if set the delegate, if not drawLayer is never called.
[drawingLayer setDelegate:self];
[self.layer addSublayer:self.drawingLayer];
}
}
- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
if(layer == [self layer])
{
[self drawPDFPage];
[drawingLayer setNeedsDisplay];
}
else if(layer == drawingLayer)
{
//this one is never called.
[self drawSomethinghere];
}
}
UIView使用-drawRect:的存在来确定是否应该允许其CALayer无效,这将导致层创建一个备份存储并调用-drawLayer:inContext: 实现空的-drawRect:方法允许UIKit继续实现此逻辑,同时在-drawLayer:inContext:中执行真正的绘图工作 只需添加到类实现中:
-(void)drawRect:(CGRect)r
{
}
您的drawLayer方法应该可以工作。UIView使用-drawRect:的存在来确定它是否应该允许其CALayer无效,这将导致层创建备份存储并调用-drawLayer:inContext: 实现空的-drawRect:方法允许UIKit继续实现此逻辑,同时在-drawLayer:inContext:中执行真正的绘图工作 只需添加到类实现中:
-(void)drawRect:(CGRect)r
{
}
您的drawLayer方法应该可以工作