我如何让我的 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
。那应该可以。
我正在按照苹果文档中的建议覆盖 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
。那应该可以。