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. VS超强调试技巧--忍不住想赞一下

    你是否曾遇到一个项目启动都要半分钟? 启动后调试或突然看到有行代码写错了?然后开始了: 处理步骤:停止运行->修改代码->重新启动(10-30秒)->又写错了->又要修改-&g ...

  2. saltstack布署实践 【配置文件管理-state模块】

    那如果要批量修改被管机器的某个配置文件怎么做?以下给出一个最简单案例.   先在主管机器master上查看/etc/salt/master配置文件 看到有以下几行配置文件   # file_roots ...

  3. H5自带表单验证

    HTML5自带的表单验证 转载:https://www.web-tinker.com/article/20781.html HTML5对表单元素提供了patern属性,它接受一个正则表达式.表单提交时 ...

  4. Android进程回收的一些知识

    关于OOM_ADJ说明: Android 进程易被杀死的情形: 参考:Android进程保活招式大全

  5. java中常遇到的问题

    一.乱码问题 =========================================================================================== 方 ...

  6. 【原生js】原生js实现验证码短信发送倒计时

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Freeplane中的自动边线颜色功能

    今天我将电脑上的Freeplane从1.3.11升级到了1.5.18.发现新版本已经没有了1.3.11中的菜单选项Format → “Automatic edge color”.搜索了一下才发现,该功 ...

  8. python3 列表 函数

    python3中list的所有函数 list是有序的,元素个数无限的,元素类型多样的,可变的 增加 # 'append', 增加对象# 'insert', 指定位置增加# 'extend', 增加可迭 ...

  9. ios之极光推送消息收到以后对消息的处理总结

    当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下     2.APP处于后台挂起情况下   3. ...

  10. vim编辑器设置文件的fileformat

    问题:dos格式文件传输到centos系统时,会在每行的结尾多一个^M,即dos文件中的换行符"\r\n"会被转换为unix文件中的换行符"\n",而此文件若是 ...