来自Ray Wenderlich博客(教程)
CALayer是代表屏幕上一个带有视觉内容的矩形的类。"但等一下,"你可能会说,“那不是UIView的工作吗!”那是对的,但这里有个诀窍:每个UIView都包含一个它绘制到的根层!
简单说,UIView继承自UIResponder,处理用户事件,包含CALayer,后者继承自NSObject, 主要用于渲染、动画等。
UIView
是CALayers
的容器,使用UIKit
实现。
CALayer
用于绘制内容,使用CoreGraphics
实现。
如果您正在处理自定义控件等功能,则最好使用包含更多层的单个视图以实现精确的本地渲染。因为CALayers
比UIView
更轻量级。
要为Mac和iOS创建通用骨架,请使用CALayers
遵循应用程序的设计。因为它在两个平台上都可用。
UIView
具有像触摸事件这样的特性,使用委托-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
,类似于tochesStart
事件和其他UIKit
功能。
要使用CALayers
,请使用Core Graphics知识。对于任何简单的视图渲染,UIView
就足够了。
UIView:视图具有更复杂的层次结构布局,可以接收用户交互,如点击、捏合、单击等。与UIView的工作发生在主线程上,这意味着它正在使用CPU计算能力。
CALayer:另一方面,层具有更简单的层次结构,这意味着它们解析速度更快,绘制在屏幕上更快。不像视图那样存在响应链开销。层直接在GPU上绘制,这会在分离的线程上进行,而不会加重CPU负担。
了解更多详情: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5
UIView 和 CALayer 的最大区别在于,UIView 是为移动设备上的 CocoaTouch 设计的。它添加了一些事件处理程序,而 CALayer 没有提供。