2011-05-30 116 views
2

Iam時,CALayer/UIView使用自定義圖層在我的UIView上繪圖時崩潰。要使無效並更新圖層,我需要將我的視圖設置爲我的CALayer的代表。完成此操作後,它會正確繪製文本,但當視圖接收到應用程序崩潰時會提取。 我做錯了什麼?當我觸摸UIVIew

- (void) layoutSubView { 
    if (drawLayer == nil) { 
     drawLayer = [[CALayer alloc] init]; 
     [drawLayer setDelegate:self]; 
     [[self layer] addSublayer:drawLayer]; 
    } 
    [drawLayer setFrame:[self bounds]]; 
    [drawLayer setNeedsDisplay]; 
} 

以上是我設置CALayer的代碼,下面是覆蓋的drawLayer方法。

- (void) drawLayer:(CALayer *)layer 
    inContext:(CGContextRef)ctx { 

     if (layer == drawLayer) { 
     UIGraphicsPushContext(ctx); 
     [self drawTitle:ctx]; 
     UIGraphicsPopContext(); 
    } 
} 

這是堆棧。

enter image description here

+0

你有沒有重寫touchesBegan/Moved/End?什麼是事故原因? – sergio 2011-05-30 15:50:50

+0

不,我沒有重寫他們,我應該只是爲了防止崩潰? – Konrad77 2011-05-30 15:55:50

+0

我不這麼認爲,但是我會嘗試重寫'convertPoint:fromLayer'來查看哪些參數被傳入......您沒有說出哪個是與崩潰相關的確切錯誤消息... – sergio 2011-05-30 16:24:19

回答

5

您不能使用UIView對象是比自己的層以外的層的委託。其規定的here。您將需要分配一些其他對象作爲其代表。

+0

謝謝,我想我應該RTFM =)我爲這一層創建一個單獨的類,或者你有更好的建議? – Konrad77 2011-05-30 15:59:06

+0

不是。我採用層次相同的路線。 – 2011-05-30 16:01:17