Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CATiledLayer上的CALayer,drawLayer:从未调用过inContext_Iphone_Objective C_Ios_Cocoa Touch_Ipad - Fatal编程技术网

Iphone CATiledLayer上的CALayer,drawLayer:从未调用过inContext

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) {

我有一个UIView,它使用CATiledLayer显示PDF页面,现在我想在TiledLayer上添加另一个CALayer来绘制一些注释,请参见下面的代码

    + (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方法应该可以工作