UIView是在/System/Library/Frameworks/UIKit.framework定义,也就是处于Cocoa Touch层。
CALyer是在/System/Library/Frameworks/QuartzCore.framework定义,也就是处于Media层。
 
从iOS整个体系分层结构看,CALayer较UIView更底层。
 
Layer相关描述:
Core Animation本身不是绘画系统(drawing system),它是硬件中合成和操控app内容的基础(infrastructure)。这个基础的核心是layer对象,layer是用于管理和操控内容的。Layer捕获你的内容到bitmap中,bitmap可以很容易被图像处理硬件操作。(《CoreAnimation_guide》(P10))
 
对layer的属性的改变,会导致动画的产生。(《CoreAnimation_guide》(P10))
 
Important:(下面这段描述很重要)
原文:

Like views, layers manage information about the geometry, content, and visual attributes of their
surfaces.Unlike views,layers do not define their own appearance.A layer merely manages the state information
surrounding a bitmap. The bitmap itself can be the result of a view drawing itself or a fixed image that you
specify. For this reason,the main layers you use in your app are considered to be model objects because they
primarily manage data.This notion is important to remember because it affects the behavior of animations.
像view一样,layers管理几何图形,内容和界面的可视属性这类相关的数据。但不同view的是,layers不会去定义自己的外观。一个layer仅仅管理一个bitmap的状态信息。bitmap本身可以是一个view绘制的结果或者一张固定图片。因此,用于app中主要的layers应该被认为是一个model对象,因为它们根本上是管理数据的。
 
Layer是不做实际的绘制工作的,layer把app提供的内容捕获并缓存到bitmap中。当你频繁的改变layer的属性时,这些实际上都是在改变layer对象的状态信息。当改变触发一个动画时,core animation传递这个layer的bitmap和状态信息到图像处理硬件,然后由硬件来利用新的这些信息去渲染这个bitmap。《CoreAnimation_guide》(P12))
 
View相关描述:
View负责绘制内容、处理多触摸事件和管理子view的布局。绘制涉及一些图像技术,如Core Graphics、OpenGL ES、使用UIKit去绘制形状、图片和文字。view通过gesture recognizer或者直接处理touch事件来响应触摸事件。在view层次结构中,父view负责布局view和决定view的大小,这是可以动态的,这可以实现为适应新的状态去动态更改子view。(《ViewPG》(P7))
 
Relationship
 
《CoreAnimation_guide》中描述(P24):
 
Layers不是用于替代view的,意味着,你不能仅仅使用layers对象去创建可视界面。Layers主要是针对高效而简单的绘制、animate views中的内容和维持高帧率(maintain high frame rates(翻译?))。Layers相较于views有很多事情是不能做的,layers不能处理用户事件、绘制内容(draw content)、参与到responder chain和另外一些事情。因此,每一个app必须有至少一个views去处理各种的交互。
 
iOS中,每一个view都有一个相关的layer对象支持。(OSX中,由你决定那些views拥有layers。然而,当你不需要时,你可以禁止使用layers。Layers会增加app的内存消耗,但是layers的作用往往大于它带来的劣势,所以,在决定不使用layer支持前,最好测试一下app的性能)。
 
当你的view提供layer支持的时候,这个view就是layer-backed view,对此,系统负责创建底层的layer对象并保持该layer对象与view同步。所有的iOS都是layer-backed的,大部分的OSX的view也是。
 
Note:iOS中,views是对layer objects的包装(提供某些layers不具备的特性或者作用),所以任何对layer的操作都是可行的。( In iOS, views are just a thin wrapper around layer objects, so any manipulations you make to the layer usually work just fine. )但是,不管在ios还是osx中都存在直接操作layer而不是view会得不到想要的结果。这是某些陷阱导致的,所以要小心。
 
除了和views相关的layer对象外,你可以创建没有与view有关联关系的layer对象。你可以把这些创建的layer嵌入到其他的layer对象中,甚至是已经和view关联的layer对象。你可以使用这些独立的layer对象作为一个特定最优路径(a specific optimization path)的一部分。例如,如果你希望在很多个地方使用同一张图片,你可以只加载这张图片一次,然后使它和很多的独立的layer objects关联,然后把这些layer对象添加到layer树中。最后,每一个layers对象都会引用这个iamge对象,而不是在内存中创建这个image的拷贝。
 
《ViewPG》中描述(P10):
View配合使用Core Animation layer去处理view内容的渲染(rendering)和动画(animating)。每一个属于UIKit的view都有一个CALayer对象支持,这个layer对象管理view的备份存储(backing store)和处理view相关的动画。大部分的操作都可以通过UIView,然而,在一些情况下,你需要更好控制view的渲染和动画,你可以操作view的layer对象作为代替。
 
文章来源自博客园:http://www.cnblogs.com/chiefhsing/archive/2013/04/09/3010704.html

UIView 和 CALayer 的区别和联系的更多相关文章

  1. iOS 杂笔-20(UIView和CALayer的区别与联系)

    iOS 杂笔-20(UIView和CALayer的区别与联系) 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提 ...

  2. UIView与CALayer的区别,很详细

    研 究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人, ...

  3. UIView与CALayer的区别,很详细(基础教学拓展)转

    研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其 ...

  4. UIView和CALayer的区别

    CALayer属于Core Animation部分的内容,比较重要而不太好理解.以下是园子中看到的一篇文章的摘录: 以下摘自<<核心动画编程指南>>: 两者最大的区别是,图层不 ...

  5. UIView与CALayer的区别

    1.UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以.UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制. 2.UIView和CALaye ...

  6. UIView CALayer 的区别

    UIView与CALayer的区别,很详细 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不 ...

  7. UIView 和 CALayer区别 为啥有UIView还要CALayer?

    今天,被坑了,面试的时候没回答出来,特此记录一下 一.继承结构 1: UIView的继承结构为: UIResponder : NSObject UIResponder是用来响应事件的,也就是UIVie ...

  8. UIView与CALayer 区别

    在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个 ...

  9. UIView 与 CALayer

    联系: 1. UIView 有个属性 layer,可以返回它的主 CALayer 实例:CALayer *layer = myView.layer 2. 一个 UIView 可以有多个 CALayer ...

随机推荐

  1. table指定位置添加行

    <html> <head> <script type="text/javascript"> //global var //to find the ...

  2. List中函数用法 First,FirstOrDefault,Single,SingleOrDefault的区别

    操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...

  3. python 函数简介之三

    1. 非固定个数的实参----参数组,* args ,其结果将以元组的形式呈现出来 def func(*args): print(args) func(1,2,3,4,5) #第一种调用方式, 多个实 ...

  4. 队列Queue FIFO先进先出 栈Stack FILO先进后出

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. 一名测试初学者听JAVA视频笔记(一)

    搭建pho开发环境与框架图 韩顺平 第一章: No1  关于文件以及文件夹的管理 将生成的文本文档做成详细信息的形式,显示文件修改时间以及文件大小,便于文件查看和管理,也是对于一名IT人士高效能工作的 ...

  6. PostgreSQL学习手册(常用数据类型)

    一.数值类型:     下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer ...

  7. (三)Harbor使用OpenLDAP认证登陆

    接上一篇<安装Harbor>,安装好之后,接下来我们使用OpenLDAP来进行Harbor  web界面的登陆验证及权限分配! OpenLDAP: 使用OpenLDAP的都知道,这是一个集 ...

  8. webstrom30天免费试用期过后如何破解继续使用

    之前下了ws 直接就用了 也没有破解 30天过去了 老是提示你 神烦  网上找了一堆注册码什么的 终于发现一个良心网站 http://idea.qinxi1992.cn/ 步骤看下面的图

  9. HMM 前向后向算法(转)

    最近研究NLP颇感兴趣,但由于比较懒,所以只好找来网上别人的比较好的博客,备份一下,也方便自己以后方便查找(其实,一般是不会再回过头来看的,嘿嘿 -_-!!) 代码自己重新写了一遍,所以就不把原文代码 ...

  10. Linux升级glibc

    参考http://www.linuxidc.com/Linux/2015-04/116472.htm via 红孩儿你好 一.简介 glibc是gnu发布的libc库,即c运行库.glibc是linu ...