2011-10-19 77 views

回答

195

在iOS上,每个UIView都由Core Animation CALayer支持,因此即使您没有意识到,也可以在使用UIView时处理CALayers。与Core Animation存在之前演化的Mac上的NSViews不同,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进行交互来完成。

35

从雷Wenderlich博客(Tutorial

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

+1

一个很好的艺术答案。 –

+0

很棒的简短回答! –

22

简单地说,从UIView的继承NSResponder类,处理来自用户的事件,包含CALayer的,它从NSObject的继承,主要集中在渲染,动画等

0

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

6

UIViewCALayers的容器。使用UIKit

CALayer我们借鉴的内容。使用CoreGraphics

如果你与像功能的自定义控制工作,这将是巨大含有准确本地绘制多层单一视图中前进。由于CALayersUIView更轻。

要创建适用于Mac和iOS常见的骨骼,请使用CALayers您的应用程序设计。因为它在两个平台都可用。

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

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

相关问题