Objective c 未在以图层为主体的视图上调用CALayer委托方法

Objective c 未在以图层为主体的视图上调用CALayer委托方法,objective-c,macos,cocoa,core-animation,Objective C,Macos,Cocoa,Core Animation,我有一个以图层为主体的视图,初始化如下: // Init layers self.wantsLayer = YES; _hostedLayer = [CALayer layer]; _hostedLayer.delegate = self; self.layer = _hostedLayer; 奇怪的是,没有调用委托方法updateLayer。 当我注释掉最后3行时,它确实会被调用 这里怎么了 提示:是的,我已经覆盖了wantsUpdateLayer,并返回Yes当视图请求一个层时,默认情况下

我有一个以图层为主体的视图,初始化如下:

// Init layers
self.wantsLayer = YES;
_hostedLayer = [CALayer layer];
_hostedLayer.delegate = self;
self.layer = _hostedLayer;
奇怪的是,没有调用委托方法
updateLayer

当我注释掉最后3行时,它确实会被调用

这里怎么了


提示:是的,我已经覆盖了
wantsUpdateLayer
,并返回
Yes

当视图请求一个层时,默认情况下它会得到一个特殊的、私有的CALayer子类,该子类具有额外的功能。虽然我从10.7开始就没有这样做过,但在那些日子里,这是一个要么全有要么全无的命题,你要么使用视图得到的默认(私有)层,然后使用AppKit约定进行绘制,要么你制作了自己的CALayer,并且所有绘制都由CALayer本身或委托方法进行处理:

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

因此,我猜在您的情况下,后两种方法将在您的视图上调用,但不会在视图特定的-updateLayer上调用。

您确定在.h文件中符合CALayerDelegate协议吗?@Reformer没有
CALayerDelegate
CALayerDelegate
是一个类别。谁聪明到可以否决投票,但不聪明到可以知道答案?哇,太糟糕了。谢谢你的解释!