2014-01-12 71 views
1

的CALayer委託方法我有這樣的層託管視圖,其被初始化像這樣:不叫上層託管視圖

// Init layers 
self.wantsLayer = YES; 
_hostedLayer = [CALayer layer]; 
_hostedLayer.delegate = self; 
self.layer = _hostedLayer; 

古怪,委託方法updateLayer不被調用。
當我註釋掉最後3行時,它確實被調用。

這裏有什麼問題?

提示:是的,我已覆蓋wantsUpdateLayer並返回YES

+0

您確定您符合CAL文件中的CALayerDelegate協議嗎? – Tirth

+0

@Reformer沒有'CALayerDelegate'。 'CALayerDelegate'是一個類別。 – NSAddict

+0

誰聰明到可以投票,但不夠聰明知道答案? – NSAddict

回答

3

當一個視圖請求一個圖層時,默認情況下它將獲得CALayer的一個特殊的私有子類,它具有額外的功能。雖然我從10.7開始就沒有這樣做過,但在那些日子裏,這是一個全有或全無的命題 - 你可以使用默認(私有)圖層,並使用AppKit約定繪製,或者你自己製作CALayer並繪製了全部由CALayer的本身或委託方法處理:

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

所以,我會在你的情況想這些後兩種方法將你的觀點被調用,而不是視圖特有-updateLayer 。

+0

哇,太糟糕了。感謝您的解釋! – NSAddict