为啥 UIView 不需要 QuartzCore.framework 工作?

Posted

技术标签:

【中文标题】为啥 UIView 不需要 QuartzCore.framework 工作?【英文标题】:Why UIView doesn't need QuartzCore.framework to work?为什么 UIView 不需要 QuartzCore.framework 工作? 【发布时间】:2013-02-20 09:01:23 【问题描述】:

我意识到每个视图都由 CALayer 支持。 所以我想知道为什么我们在使用 UIView 时不需要在我们的项目中导入 QuartzCore.framework ?

我知道如果我们需要设置诸如 shadowOffset 之类的属性,我们需要这样做,但我确信在它自己的实现中需要设置这些属性。

感谢您的回答。

【问题讨论】:

【参考方案1】:

因为除非您更改 UIView 层的属性,否则您不会直接访问任何 CALayer 属性或方法。 UIView 在内部使用它。

编辑你不需要链接它只是为了使用 UIView 的原因是因为 UIView 是一个已经编译的库。里面的所有符号都已被解析(或标记为弱,也就是在运行时解析),因此编译器和链接器只需按原样使用它们。

【讨论】:

好的,但是如果我使用 mapkit.framework 创建一个框架。如果你想使用我的自定义框架,你必须导入它和 mapkit.framework 对吗? 不,我认为您不了解“导入”的实际作用。如果您直接使用其中的函数,则只需要导入某些内容。你当然需要链接它,但你不需要导入它。 我不是说#import 抱歉。我的意思是将二进制文件与库链接。我同意你的观点,我不需要导入 QuartzCore,但我至少应该链接 QuartzCore 以便 uikit/UIView 使用 CALayer no ? 是的,默认情况下所有 Xcode 项目都会链接 QuartzCore。不需要使用 UIView 的原因是 UIView 已经编译好了。【参考方案2】:

如果你正在使用这个框架的任何类,你只需要QuartzCore.framework 框架。 所以UIView 类正在导入这些框架。P.S. 导入框架并不意味着现在您可以使用该框架。这些框架已经在ios 中,您只需导入它们,这样您就可以抑制编译器警告并且您的项目编译成功。

【讨论】:

好的,但是如果我使用 mapkit.framework 创建一个框架。如果你想使用我的自定义框架,你必须导入它和 mapkit.framework 对吗? 如果您的框架已编译,那么我认为您不必导入 mapkit.framework

以上是关于为啥 UIView 不需要 QuartzCore.framework 工作?的主要内容,如果未能解决你的问题,请参考以下文章

只使用Quartzcore / layer为UIView添加顶部边框?

为啥即使没有 QuartzCore 也可以使用 Core Animation? [复制]

UIView 的 iPad 图层阴影效果

使 UIView 的特定角为圆形

如果初始帧为 CGRectZero,则不会调用自定义 UIView 的 drawRect

为啥尝试使用 drawRect 绘制彩色圆圈时颜色是透明的?