Ios UIView和CALayer之间有什么区别?

Ios UIView和CALayer之间有什么区别?,ios,uiview,uikit,calayer,Ios,Uiview,Uikit,Calayer,两者都具有大多数相同的属性,都支持不同类型的动画,都表示不同的数据。 UIView和CALayer之间有什么区别?来自Ray Wenderlich博客() Calayer只是表示屏幕上矩形的类 具有视觉内容。“但是等一等,”你可能会说,“那太好了 UIViews的用途是什么!”这是真的,但有一个窍门: 每个UIView都包含它所绘制到的根层 在iOS上,每个UIView都有一个核心动画CALayer支持,因此在使用UIView时,您需要处理CALayer,即使您可能没有意识到这一点。与Mac上的

两者都具有大多数相同的属性,都支持不同类型的动画,都表示不同的数据。
UIView和CALayer之间有什么区别?

来自Ray Wenderlich博客()

Calayer只是表示屏幕上矩形的类 具有视觉内容。“但是等一等,”你可能会说,“那太好了 UIViews的用途是什么!”这是真的,但有一个窍门: 每个UIView都包含它所绘制到的根层


在iOS上,每个UIView都有一个核心动画CALayer支持,因此在使用UIView时,您需要处理CALayer,即使您可能没有意识到这一点。与Mac上的NSView不同,它是在核心动画出现之前发展起来的,UIView旨在成为围绕这些Calayer的轻量级包装器

正如我在类似问题中所描述的,与UIView相比,直接使用CALayers并不会给您带来显著的性能优势。您可能希望使用CALayers而不是UIViews构建用户界面元素的原因之一是,它可以很容易地移植到Mac。UIView与NSView非常不同,但Calayer在这两个平台上几乎相同。这就是为什么核心Plot框架使用CALayers而不是其他UI元素来显示其图形的原因

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


在执行比基本UIView类允许的更复杂的动画时,通常需要访问UIView的底层。UIView的动画功能随着iOS SDK的成熟而增长,但仍有一些事情最好通过与底层CALayer交互来完成。

简单地说,UIView继承自UIResponder,处理来自用户的事件,包含从NSObject继承的CALayer,主要关注渲染,动画等。

最大的区别在于UIView是为移动设备上的CoCoCoTouch而设计的。它添加了CALayer没有提供的一些事件处理程序。

UIView
是CALayer的容器。使用
UIKit

CALayer
我们在这里绘制内容。使用
CoreGraphics

如果使用类似自定义控件的功能,最好使用包含更多层的单视图,以实现精确的本机渲染。因为
calayer
UIView

要为Mac和iOS创建通用框架,请使用
CALayers
遵循应用程序的设计。因为它在两个平台中都可用

UIView
具有使用代理实现的触摸事件等功能
-(void)touchesend:(NSSet*)toucheevent:(UIEvent*)event
tochesStart
类似事件和其他
UIKit
功能


使用
CALayers
使用核心图形知识。对于任何简单的视图渲染
UIView
就足够了

ui视图:视图具有更复杂的层次结构布局。他们可以接收用户交互,比如轻敲、捏、剪贴等等。在主线程上使用UIView,这意味着它正在使用CPU能力

CALayer:另一方面,层具有更简单的层次结构。这意味着它们在屏幕上的分辨率和绘制速度更快。与视图不同,没有响应器链开销。图层直接在GPU上绘制。它发生在一个单独的线程上,不会给CPU带来负担

有关详细信息: