UIView和CALayer有什么区别?


Answers:


223

在iOS上,每个UIView都由Core Animation CALayer支持,因此即使您可能没有意识到,使用UIView时也要处理CALayers。与Mac上的NSViews(在Core Animation出现之前就已发展)不同,UIViews旨在成为这些CALayer的轻量级包装。

正如我在类似问题“何时在Mac / iPhone上使用CALayer?”中描述的那样。,直接与CALayers一起使用不会比UIViews带来明显的性能优势。您可能想用CALayers而不是UIViews构建用户界面元素的原因之一是,它可以很容易地移植到Mac。UIViews与NSViews有很大的不同,但是CALayers在两个平台上几乎相同。这就是为什么Core Plot框架使用CALayers而不是其他UI元素布置其图的原因。

UIViews通过CALayers提供的一件事是对用户交互的内置支持。如果管理CALayers的层次结构,它们将处理有关触摸和其他相关动作的命中测试。自己实现它并不难,但是在构建仅CALayer接口时,您需要编写额外的代码。

当执行比基本UIView类允许的更复杂的动画时,通常将需要访问UIView的基础层。随着iOS SDK的成熟,UIView的动画功能也得到了发展,但是仍然存在一些与基础CALayer交互的最佳方法。


40

来自Ray Wenderlich博客(教程

CALayers只是类,它们表示屏幕上具有可视内容的矩形。您可能会说:“但是等一会儿,这就是UIViews的目的!” 是的,但这有一个窍门:每个UIView都包含一个绘制到的根层!


33

简单来说,UIView继承自UIResponder,处理用户事件,包含CALayer,后者继承自NSObject,主要集中在渲染,动画等方面。


7

UIView是的容器CALayers。使用UIKit

CALayer我们在其中绘制内容。使用CoreGraphics

如果您使用自定义控件之类的功能,那么最好使用包含更多层的单个视图以进行准确的本机渲染。由于CALayers没有重量UIView

要为Mac和iOS创建通用框架,请使用为您的应用程序设计样式CALayers。由于在两个平台上都可用。

UIView具有使用委托实现的触摸事件之类的功能-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)eventtochesStart例如事件和其他UIKit功能。

CALayers使用Core Graphics知识,对于任何简单的视图渲染UIView就足够了。


0

最大的不同是UIView是为移动设备上的CocoaTouch设计的。它添加了CALayer未提供的一些事件处理程序。


0

UIView:视图具有更复杂的层次结构布局。他们可以接收用户的互动,例如轻按,捏,按等。使用UIViews是在主线程上进行的,这意味着它正在使用CPU电源。

CALayer:另一方面,层具有更简单的层次结构。这意味着它们更快地解决,并且更快地在屏幕上绘制。与视图不同,没有响应者链开销。图层直接在GPU上绘制。它发生在单独的线程上,而不会给CPU造成负担。

有关更多详细信息:https : //medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.