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

Posted

技术标签:

【中文标题】如何让我的 UIView 使用我的自定义 CALayer 作为其支持层?【英文标题】:How do I have my UIView use my custom CALayer as its backing layer? 【发布时间】:2015-08-29 21:30:57 【问题描述】:

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

+ (Class)layerClass 
     return [ViewLayerBase class];

在我的 viewLayerBase 自定义类中,我有一个这样实现的 init 方法:

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

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

【问题讨论】:

【参考方案1】:

您做得对(将layerClass 类方法添加到您的自定义 UIView 类。)

问题在于您的 init 方法。对于CALayer,指定的init方法是init,而不是initWithRect。尝试将您的代码移至-init。应该可以的。

【讨论】:

那行得通。但是,如果我希望我的 Layer Init 方法与我的视图具有相同的边界怎么办? 这是自动发生的。当您在视图上设置属性(如边界)时,实际上只是在图层上设置它们的通道。

以上是关于如何让我的 UIView 使用我的自定义 CALayer 作为其支持层?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C - 给定一个 UINib 实例,我如何初始化我的自定义 UIView?

如何让我的自定义不和谐机器人发送消息

如何确保让我的自定义 OidcUserService 被默认调用?

使用 iCarousel 时,我的自定义 UIView 显示但里面啥都没有?

使用其父 VC 底部布局更改我的自定义 UIView 的约束

为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?