图层理解

参看iOS-Core-Animation-Advanced-Techniques(一)
参看CALayer与UIView的关系
参看iOS CoreAnimation专题——原理篇(一) CALayer与UIView之间的关系

UIView是iOS开发的核心类,在我们看来,它负责几乎所有的界面展示和用户交互,这是苹果设计得非常好的一个地方——它完美的将其真正负责绘制界面的那个类封装起来了,对开发者而言,我们几乎只和UIView打交道就能完全控制一个视图的显示而不需要去管它底层究竟如何去处理的,然而我们今天必须要稍微深入进UIView中看看,以便于我们之后对动画原理的学习。

对于CALayer这个类 我相信大家都不太陌生,大多数人第一次接触这个类都是通过一个UIView对象的属性layer认识的。在学习如何给一个视图加圆角、设置边框颜色之类的效果的时候,第一次接触到了CALayer,当时并没有去理会这个东西,因为它似乎并不是UIKit框架中的东西,也不知道它有啥用,只是隐隐觉得这个家伙并不简单,事实的确如此。

CALayer是属于QuartzCore框架而这个框架是一个跨平台的绘制框架。这里的跨平台指的是在iOS和OS X系统上均能使用,也就是说CALayer能在iOS和OS X上面绘制内容 (这也说明了为什么CALayer的很多属性都不是UIKit框架下面的东西,比如它的backgroundColor是CGColorRef,因为OS X中没有UIKit)。但是这两个平台接收用户交互的方式完全不一样:iOS是通过触摸事件(touch event)而OS X则是监听鼠标和键盘事件。

苹果的工程师们考虑到:这两个平台的绘制规则(如何将一个像素显示到屏幕上)都是一样的,但是交互规则完全不一样。所以他们使用了同一种绘制方式和不同的交互方式,具体的,他们将CALayer作为两个平台共同的用来绘制内容的类而针对交互方式,他们在iOS中使用了UIResponder类来响应交互,在OS X中则没有UIKit里面的类取而代之是叫做NSView之类的东西。而通常情况下交互是发生在绘制内容之上的(有内容的地方才能点击),所以UIKit将CALayer封装进了UIView中,让开发者们感觉到UIView既能绘制又能处理交互,而实际上负责绘制的是UIView中的CALayer。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • 引言 无论是现实生活还是实际开发中,我们常常会遇到一类相似的行为,他们都包含相似的基本操作和固定的流程,不同的是他...
    CrazyMO_阅读 2,759评论 0 0
  • 老一辈的思想是不允许年轻人去探索新的道路,前人总是对的,你墨守成规就好啦。当个复制品就很不错啦,这就是我们一代不如...
    南渡先生阅读 163评论 0 0
  • 女子已经在我身边哭了十多分钟了,无论我和欢伯对她说些什么,她都无动于衷。她就兀自的趴在大理石吧台前,像一只受了伤的...
    高予沫阅读 377评论 0 1
  • 题目 男人八题 之 Connected Graph题目内容可以看上边链接,这里不在赘述。就是求 n 个不同点的无向...
    86棵梦阅读 1,066评论 0 0