UIView和CALayer有什么区别?

两者都具有大部分相同的属性,都支持不同types的animation,都表示不同的数据。 UIView和CALayer有什么区别?

在iOS上,每个UIView都由Core Animation CALayer提供支持,因此即使您没有意识到,也可以在使用UIView时处理CALayer。 与Mac上的NSView不同,它是在Core Animation出现之前发展起来的,UIViews的目的是成为这些CALayers的轻量级包装。

正如我在类似的问题“何时在Mac / iPhone上使用CALayer? 直接与CALayers合作并不会给你带来比UIViews更多的性能优势。 您可能想要使用CALayers而不是UIViews构build用户界面元素的原因之一是可以非常方便地将其移植到Mac。 UIViews与NSViews有很大的不同,但CALayers在两个平台上几乎完全相同。 这就是为什么Core Plot框架使用CALayers而不是其他UI元素来绘制图表的原因。

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

在执行比基本UIView类允许的更复杂的animation时,您经常需要访问UIView的底层。 随着iOS SDK的成熟,UIView的animationfunction也在不断增加,但是仍然有一些事情最好通过与底层CALayer进行交互来完成。

从Ray Wenderlich博客( 教程 )

CALayers只是在屏幕上用可视内容表示矩形的类。 “但是请等一下,”你可能会说,“这就是UIViews的用途!”这是真的,但是有一个技巧:每个UIView都包含一个它所依赖的根层。

简而言之,UIViewinheritance自NSResponder,处理来自用户的事件,包含从NSObjectinheritance的CALayer,主要关注渲染,animation等。

UIViewCALayers的容器。 使用UIKit

CALayer我们绘制的内容。 使用CoreGraphics

如果您使用像自定义控件一样的function,那么使用包含更多图层的单一视图来进行准确的本地呈现将是非常好的。 由于CALayersUIView CALayers

要为Mac和iOS创build常用框架,请使用CALayers按照您的应用程序的devise进行CALayers 。 因为它在两个平台上都可用。

UIView具有使用委托实现的触摸事件的function-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)eventtochesStart像事件和其他UIKitfunction。

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

最大的区别是UIView是为移动设备上的CocoaTouchdevise的。 它增加了一些CALayer没有提供的事件处理程序。