2012-06-07 33 views
1

我有一個UIView顯示使用CATiledLayer的PDF頁面,現在我想添加另一個CALayer在TiledLayer上繪製一些註釋,請參閱下面的代碼。CALayer在CATiledLayer,drawLayer:inContext從來沒有叫

+ (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]; 
    } 
} 

回答

1
UIView的

使用-drawRect的存在:以確定它是否應允許將被無效其CALayer的,那麼這將導致該層中產生一個後備存儲和-drawLayer:inContext的:被調用。

實現一個空的-drawRect:方法允許UIKit繼續實現這個邏輯,同時在-drawLayer:inContext:內部進行真正的繪圖工作。

只需添加到您的類實現:

-(void)drawRect:(CGRect)r 
{ 

} 

和你drawLayer方法應該工作。