UIView和CALayer有什么区别?

时间:2011-10-19 18:36:11

标签: ios uiview uikit calayer

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

6 个答案:

答案 0 :(得分:215)

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

正如我在类似问题"When to use CALayer on the Mac/iPhone?"中所描述的那样,直接与CALayers合作并没有给你带来比UIViews更大的性能优势。您可能希望使用CALayers而不是UIViews构建用户界面元素的原因之一是它可以非常容易地移植到Mac。 UIViews与NSViews有很大不同,但CALayers在两个平台上几乎完全相同。这就是Core Plot框架使用CALayers而不是其他UI元素来布局其图形的原因。

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

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

答案 1 :(得分:40)

来自Ray Wenderlich博客(Tutorial

  

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

答案 2 :(得分:28)

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

答案 3 :(得分:7)

<form> <table> <tr> <td>Qty</td> <td>Name </td> <td>Price</td> </tr> <tr> <td><input type="text" name="" ></td> <td><input type="text" name="" > </td> <td><input type="text" name="" ></td> </tr> <tr> <td><input type="text" name="" ></td> <td><input type="text" name="" > </td> <td><input type="text" name="" ></td> </tr> <tr> <td><input type="text" name="" ></td> <td><input type="text" name="" > </td> <td><input type="text" name="" ></td> </tr> . . . . . </table> <input type="submit" name="sendform" value"send" > </form>UIView的容器。使用CALayers

UIKit我们在那里绘制内容。使用CALayer

如果您使用自定义控件之类的功能,那么继续使用包含更多图层的单个视图以获得准确的本机渲染将会非常棒。由于CoreGraphics的重量轻于CALayers

要为Mac和iOS创建通用骨架,请使用UIView按照您的应用设计进行操作。既然它可以在两个平台上使用。

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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