看板 MacDev 關於我們 聯絡資訊
想請教一個問題 我有一個UIView的subclass 打算將其(CALayer*)layer內多疊幾層其他的CALayer 其中一個sublayer是專門要畫text用的 因為CATextLayer的string似乎是沒有anti-aliasing 而用NSString的NSString UIKit Additions Category的drawInRect:WithFont: 似乎不是畫在指定的Layer上? 而用CALayer的delegate method =>drawLayer:inContext: 似乎可以達到目的 但是我將該CALayer(畫text的)的delegate與最上層layer的delegate同一個時(UIView) 卻發生run-time時整個跳出,UIView在initialization時的code如下: self.contextLayer = [CALayer layer]; // contexstLayer為CALayer self.contextLayer.delegate = self; //將該layer的delegate設為UIView本身 [self.layer addSublayer:self.contextLayer]; //將該layer加到本身layer下 而我測試UIView底下的drawLayer:inContext:在還沒被invoked 就先跳出整個App 請問有什麼方法可以解決這個問題呢? 因為我需要該CALayer是因為不同的subclass可以去實作該layer要怎麼畫 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.126.38.191 ※ 編輯: leondemon 來自: 120.126.38.191 (04/05 16:44)
aecho:你是為了加快繪圖的速度才這麼做的嗎? 04/05 18:33
aecho:http://ppt.cc/Q0FB 04/05 18:37
aecho:http://ppt.cc/JsZ- 04/05 18:48
aecho:目前查到的文章,不傾向覆寫drawLayer:inContext: 04/05 18:49
謝謝! 因為我一個UIView其實內部含有不同的component 每次要display時 不是每個component都需要被redraw... 因此在設計上 我將不同的componenet以不同的CALayer加入原本最底層的layer 然後在drawRect的時候,只將某CALayer進行重畫 但是我不知道要如何-drawRect內部 去針對某個CALayer進行redraw.... 目前如果我直接在-drawRect內進行一些drawing code的話 都會被我其他的sublayer擋住 所以希望能將圖層的概念套在UIView的內部 只針對某層進行改變... 我看我再試試看 新弄一個NSObject當做delegate好了(不過記憶體管理就變得有點麻煩) ※ 編輯: leondemon 來自: 120.126.38.191 (04/05 18:58)
ttflee:CAxxx求快,CGxxx的求質量,需要高品質的繪圖還需CG系的。 04/06 08:30