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. android jni ndk 视频分享

    链接如下:http://download.csdn.net/detail/jltxgcy/5667327.

  2. easyui 个人使用心得之下拉列表

    下拉框: 第一种:从数据库获取<input id="FlowType" name="FlowType" style="width: 245px; ...

  3. 浅谈java垃圾回收机制

    今天看thinking in java,里面很详细的谈到java垃圾回收器机制,看完后让我对这神秘的区域有一定的了解,特写一些小总结记录下来. 分两点来说. 第一点:Object.finalize() ...

  4. swift设置textfield边框颜色

    //swift3.0,如果是2.0的话也可以照着这个样子去写,语法有所变动.根据联想出来的就可以了. let tx = UITextField(frame: CGRect(x: 100, y: 100 ...

  5. Mvc分页组件MvcSimplePager代码重构

    1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件M ...

  6. C语言之进制

    进制 一种计数的方式.侧重点在于计数的时候是逢多少进一. 1)      C语言可以识别的进制 二进制 每一位. 0 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 在C语言中,写 ...

  7. this和$(this)

    this指的是javascript对象而$(this)就是就jquery对象 jQuery.prototype.test=function(){ this.css("color", ...

  8. ASP.NET中的C#基础知识

    ASP.NET中的C#基础知识 说明:asp.net作为一种开发框架现在已经广为应用,其开发的基础除了前端的html.css.JavaScript等后端最重要的语言支持还是C#,下面将主要用到的基础知 ...

  9. 初次配置eclipse, jdk, tomcat, maven, mysql, alt+/

    eclipse 官网下载eclipse-inst-win64.exe, 选择安装java ee. jdk 官网下载jdk-8u102-windows-x64.exe, next到底. 接下来配置环境变 ...

  10. Redmine数据库备份及搬家

    Bitnami Redmine的备份分2种方式: 1.导出数据库 2.整个目录搬家 不管是哪种都想停掉服务,redmine相关的服务有以下5个: redmineApache redmineMySQL ...