【问题标题】:How can CALayer be an underlying layer in UIView without importing Quartz CoreCALayer如何在不导入Quartz Core的情况下成为UIView中的底层
【发布时间】:2014-05-24 04:33:18
【问题描述】:

我一直在阅读一些有关 Core Animation 的内容,并强调必须对 CALayer 有一个很好的理解才能更好地理解它。

我感到困惑的部分可能并不那么重要,但我只是想更好地理解一个事实,即 CALayer 和 UIView 之间显然存在非常紧密的联系,并且显然每个 UIView 都有一个底层 CALayer默认情况下,但我的问题是......

如何在每个UIView中使用CALayer而不需要导入Quartz Core框架,如果想使用CALayer需要先导入Quartz Core框架?

我假设每次使用 UIView 时都会发生 CALayer 和 UIView 之间的紧密联系,还是仅在用于动画时发生?如果是这种情况,这将回答我的第一个问题并澄清我的困惑。

这里是第 16 章“iOS 5 编程基础知识”一书中的段落。

“一个 UIView 实例有一个附带的 CALayer 实例,可作为视图的图层属性访问。”

"因为每个视图都有一个底层,所以有一个紧密的 两者的结合。”

【问题讨论】:

    标签: ios objective-c uiview calayer


    【解决方案1】:

    UIView总是由 CALayer 支持。

    UIView 通过导入框架本身来使用 Quartz Core 框架。 Quartz Core 实际上是“加载的”,但您的代码无法引用它,因为这些符号在编译时对您的文件不可用。

    可以做这样的事情(这是不好的做法,但说明 Quartz Core 确实可用)

    id layer = [self.view performSelector:NSSelectorFromString(@"layer")];
    NSArray *filtersOnLayer = [layer performSelector:NSSelectorFromString(@"filters")];
    

    过去,您必须#import <QuartzCore/QuartzCore.h> 以便与图层对象进行交互。我不知道为什么,但在 Xcode 5 左右,情况似乎不再如此。这可能与 Apple 如何改变他们管理预编译头文件的方式有关。

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 2022-10-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多