在前向类对象“CALayer”中找不到属性“cornerRadius”
Posted
技术标签:
【中文标题】在前向类对象“CALayer”中找不到属性“cornerRadius”【英文标题】:Property 'cornerRadius' cannot be found in forward class object 'CALayer' 【发布时间】:2013-08-17 05:59:08 【问题描述】:我已经查看了与此错误相关的所有答案(几乎所有答案都建议 this solution),但我的问题似乎有所不同。
我想要一个带有特定图像作为背景的圆角矩形 UIButton。我设法在我的一个视图控制器中成功地做到了这一点,让我们将此 VC 称为first VC
,使用:
self.revealAnswerButton.layer.cornerRadius = 10;
在这个 VC 中,第一个 VC,我只导入了 #import <UIKit/UIKit.h>
而不是 <QuartzCore/QuartzCore.h>
。这很好用。我想这是因为:
第一季度。 UIView 类具有我在上面的代码中使用的@property layer
,因此它可以正常工作,甚至无需导入Quartz
框架。我的这个假设对吗?
让我们继续:在我的另一个 VC 中,我们将其称为第二个 VC,在相同的 StoryBoard 中相同的代码 (self.startButton.layer.cornerRadius
) 不起作用。它抛出错误:Property 'cornerRadius' cannot be found in forward class object 'CALayer'
第二季度。为什么在不同的 VC 中会有不同的行为?
我试图找到根本原因,这就是我发现的:
在我的第一个 VC 中,layer
属性直接映射到 UIView 的@property layer
,如下所示:
但在我的第二个 VC 中,layer
正在路由到 CALayer
的 +layer
类方法,如下所示:
我不知道从哪里开始 :( 你能帮我吗?非常感谢您抽出宝贵的时间。如果需要任何其他信息,请告诉我。谢谢。
【问题讨论】:
我不确定你在问什么,你不能把cornerRadius
。非常感谢您的快速回复。
第一层属性只是一个转发类,第二个VC知道类定义。来自不同 VC 的 2 个按钮的类型和类别是否相同?
【参考方案1】:
您必须将使用角半径的视图控制器导入。 并用于制作核心圆使用以下
self.revealAnswerButton.layer.cornerRadius = 5.0f;
self.revealAnswerButton.layer.masksToBounds = YES;
【讨论】:
我可以导入Quartz
框架,并且可以使用 cornerRadius
和 masksToBounds
来实现相同的效果,但是在我的第一个 VC 中,我没有导入 Quartz,而只是导入了 UIKit
,它首先运行良好风险投资。那么第二个VC有什么不同。这就是问题所在?感谢您的宝贵时间。
检查您的第一个 VC .h 和 .m 文件,您可能正在导入一些您可能在其中定义了 Quartz 类的其他类,因此您的第一个 VC 通过其他一些类间接获取 Quartz 类。
我已经检查过那个东西,但没有一个导入的类间接使用Quartz
。这是我上面的问题 1 形式: UIView 类有 @property layer
我在上面的代码中使用它,所以它甚至可以在没有导入 Quartz 框架的情况下正常工作。我的这个假设对吗?
需要导入 QuartCore 才能访问 CALayer 的属性
我在我的第一个 VC 中没有导入 QuartzCore 框架就成功了。但同样会在第二个 VC 中引发错误。这就是我的困境。以上是关于在前向类对象“CALayer”中找不到属性“cornerRadius”的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用前向类“NSManagedObjectModel”作为 Swift 类模型的超类