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
- iOS 杂笔-20(UIView和CALayer的区别与联系)
iOS 杂笔-20(UIView和CALayer的区别与联系) 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提 ...
- UIView与CALayer的区别,很详细
研 究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人, ...
- UIView与CALayer的区别,很详细(基础教学拓展)转
研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其 ...
- UIView和CALayer的区别
CALayer属于Core Animation部分的内容,比较重要而不太好理解.以下是园子中看到的一篇文章的摘录: 以下摘自<<核心动画编程指南>>: 两者最大的区别是,图层不 ...
- UIView与CALayer的区别
1.UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以.UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制. 2.UIView和CALaye ...
- UIView CALayer 的区别
UIView与CALayer的区别,很详细 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不 ...
- UIView 和 CALayer区别 为啥有UIView还要CALayer?
今天,被坑了,面试的时候没回答出来,特此记录一下 一.继承结构 1: UIView的继承结构为: UIResponder : NSObject UIResponder是用来响应事件的,也就是UIVie ...
- UIView与CALayer 区别
在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个 ...
- UIView 与 CALayer
联系: 1. UIView 有个属性 layer,可以返回它的主 CALayer 实例:CALayer *layer = myView.layer 2. 一个 UIView 可以有多个 CALayer ...
随机推荐
- 做个简单的Redis监控(源码分享)
Redis监控 Redis 是目前应用广泛的NoSQL,我做的项目中大部分都是与Redis打交道,发现身边的朋友也更多人在用,相对于memcached 来说,它的优势也确实是可圈可点.在随着业务,数据 ...
- ASP.NET MVC 异步Excel数据选择导出
以前习惯用一些框架来实现Excel文件数据导出,工作中也经常用到:比如extJs.easyUI.angularJs等,最近在做mvc程序的时候要实现该功能,相信这种功能在我们实际工作中是很常见,尤其是 ...
- .Net基于RealProxy实现AOP
一.概述 关于AOP(面向切面编程)还是先讲一个日常经常碰到的场景"错误日志的记录",一般来说我们编码的时候想记录错误日志都是用try..catch来进行捕捉和记录,慢慢的你会发现 ...
- Oracle wm_concat(列转行函数)实际使用
接触到了一个开发需求.其中是要把NC单据表体行的字段拼成一个字符串.例如: id name work age 1 王一 搬运工 20 2 李二 清洁工 21 3 张三 洗脚工 22 出现结果字符串为: ...
- 蓝桥杯 C语言 基础训练 数列排序
问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输 ...
- [UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)
瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子 ...
- orm2
数据库连接 var orm = require("orm"); orm.connect("mysql://username:password@host/database& ...
- SSH 一些错误的解决办法
1.主动访问的机器需要创建私钥和公钥 (client) #cd ~#mkdir .ssh#chmod 700 .ssh#cd .ssh#ssh-keygen -t rsa //一路回车,各种提示按默认 ...
- shrio登录验证
shiro的认证过程也就是判断用户名和密码的过程,在认证过程中,用户需要提交实体信息(用户名)(Principals)和凭据信息(密码)(Credentials)来判断用户是否合法,最常见的" ...
- js验证如何限制文本框只能输入数字
s限制只能数字输入,并且在把输入的“非法字符”清除掉之后将焦点停留在输入非法字符的位置,参考如下:html部分:<input value="" type="text ...