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 ...
随机推荐
- building android/ubuntu-touch on 32bit machine
host C: libhost <= build/libs/host/CopyFile.c host StaticLib: libhost (/media/linux/1/touch/expor ...
- OpenCV环境搭建
前言 我在上本科时候曾经用过opencv,那时候还是1.x版本,还必须在linux下自己编译. 时过境迁,最近突然想起来写个小程序来分析图片,就又想起了opencv.现在已然是2.4的版本. 环境搭建 ...
- jprofiler8使用小贴士
说明:本文的小贴士是针对jprofiler8的,其他版本上可能有不适用的地方 贴士一:使用jpenable监控,无需增加jvm参数和重启 贴士一:使用jpenable监控,无需增加jvm参数和重启 j ...
- Python自学笔记——Matplotlib风羽自定义
[前言]对于气象专业的小学生来说,风场是预报重要的参考数据,我们所知的风羽有四种:短线代表风速2m/s,长线代表风速4m/s,空心三角代表风速20m/s,实心三角代表风速50m/s.而matplotl ...
- CMake学习
CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用. 作者:AlphaGL.版权所有,欢迎保留原文链接进行转载 :) 本文目录如下: 1.CMake介绍 2.CMake安装与使用 2 ...
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- MVC源码解析 - 进入CLR
这一篇是转载自汤姆大叔的一篇随笔. IIS 5 的 ASP.net 请求处理过程 IIS5核心特征是:IIS是允许在一个叫InetInfo.exe的进程上的,所以无论是aspx页面还是html页面都是 ...
- 【转】UWP 捕获全局异常
转自:http://www.cnblogs.com/youngytj/p/4749004.html 异步(async)方法中的异常无法被App的UnhandledException捕获的问题 这是一个 ...
- 获取select选中的值
$("#CalibrationYear option:selected").text();
- dev gridcontrol把event事件转换成命令
可以通过继承gridcontrol的形式来实现 定义DataGridDoubleClickCommand依赖属性 class MyGridControl : GridControl { ...