CALayer委托方法未在图层托管视图上调用

时间:2014-01-12 17:41:55

标签: objective-c macos cocoa core-animation

我有这个图层托管视图,它初始化如下:

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

奇怪的是,没有调用委托方法updateLayer 当我注释掉最后3行时,它会被调用。

这里有什么问题?

提示:是的,我已覆盖wantsUpdateLayer并返回YES

1 个答案:

答案 0 :(得分:3)

当一个视图要求一个图层时,它默认获得CALayer的一个特殊的私有子类,它具有额外的功能。虽然自10.7以来我没有这样做,但在那些日子里它是一个全有或全无的命题 - 你要么使用视图得到的默认(私有)层,要么使用AppKit约定绘制,或者你自己制作了CALayer和绘图全部由CALayer本身或委托方法处理:

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

所以,我想在你的情况下会在你的视图中调用后两种方法,而不是视图特定的-updateLayer。