如果不导入Quartz Core,CALayer如何成为UIView的底层

时间:2014-04-10 12:48:34

标签: ios objective-c uiview calayer

我一直在阅读有关核心动画的内容,并强调要更好地理解CALayer是必须的,以便更好地理解它。

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

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

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

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

  

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

     

“因为每个视图都有一个底层,所以紧张   两者之间的整合。“

1 个答案:

答案 0 :(得分:2)

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如何改变他们管理预编译头文件的方式有关。