UIView和CALayer有什么区别?

Ole*_*anu 99 calayer uikit uiview ios

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

Bra*_*son 220

在iOS上,每个UIView都有一个Core Animation CALayer支持,所以你在使用UIView时正在处理CALayers,即使你可能没有意识到.与核心动画存在之前发展的Mac上的NSView不同,UIViews旨在成为围绕这些CALayers的轻量级包装器.

正如我在类似问题中描述的那样"何时在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交互来完成.


Mat*_*Mat 40

来自Ray Wenderlich博客(教程)

CALayers只是在屏幕上用可视内容表示矩形的类."但等待一分钟,"你可能会说,"这就是UIViews的用途!"这是真的,但有一个技巧:每个UIView都包含一个根据它绘制的根层!


For*_*est 32

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


Gob*_*i M 7

UIView是一个容器CALayers.用UIKit.

CALayer我们在哪里画内容.运用CoreGraphics

如果您使用自定义控件之类的功能,那么继续使用包含更多图层的单个视图以获得准确的本机渲染将会非常棒.因为CALayers失重比UIView.

要为Mac和iOS创建通用骨架,请使用适合您应用的设计CALayers.既然它可以在两个平台上使用.

UIView具有使用代表实现的触摸事件等功能-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event,tochesStart如事件和其他UIKit功能.

一起工作CALayers使用核芯显卡knowledge.For任何简单的视图呈现UIView就足够了.