我如何让我的 UIView 使用我的自定义 CALayer 作为其支持层?

How do I have my UIView use my custom CALayer as its backing layer?

我正在按照苹果文档中的建议覆盖 UIView 的 layerClass 方法,如下所示:

+ (Class)layerClass {
     return [ViewLayerBase class];
}

在我的 viewLayerBase 自定义中 class 我有一个这样实现的初始化方法:

- (id)initWithRect:(CGRect)rect {
     if ((self = [super init])) {
         NSLog(@"I got called");
     }
     return self;
}

我的 UIView 子 class 显然没有调用此方法。鉴于 UIView 的层 属性 是只读的,我不能做 myView.layer = [ViewLayerBase alloc] initWithRect... 如何让 UIView 实例化我的自定义 CALayer subclass?

您做得对(向您的自定义 UIView class 添加 layerClass class 方法。)

问题出在您的初始化方法上。对于 CALayer,指定的初始化方法是 init,而不是 initWithRect。尝试将您的代码移动到 -init。那应该可以。