文章目录
I、UIView和CALayer的区别
iOS中提供UIView和CALayer这两个平行层级结构主要是为了做到职责分离,实现视图的绘制、显示和布局解耦,避免很多重复的代码。
在iOS和Mac OS两个平台上,事件和用户交互有很多地方并不相同,毕竟基于多点触控的用户界面和基于鼠标键盘有着本质的区别,这就是为什么iOS有UIKit和UIView,但是Mac OS有Appkit和NSView的原因。它们功能虽然相似,但是在实现上有着显著的区别。创建两个层次结构就能够在iOS与MacOS之间共享代码,从而使得开发更加便捷。
-
1)CALayer无法响应用户事件。UIView和CALayer的最明显区别在于它们的可交互 性,即UIView可以响应用户事件,而CALayer不可以,原因可以从这两个类的继承关系上看出(见图6-1)。UIView是继承自UIResponder的,决定了UIView类及其子类能够通过响应链(iOS通过视图层级关系来传递触摸事件)接收并响应用户事件。而CALayer直接继承于NSObject类,所以它不清楚具体的响应链,也就无法响应用户事件。
-
2)分工不同。UIView类侧重于对显示内容的管理和整体布局,而CALayer侧重于显示内容的绘制、显示和动画。
-
3)所属框架不