1.UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。它本身完全是由CoreAnimation来实现的(Mac下似乎不是这样)。它真正的绘图部分,是由一个叫CALayer(Core Animation Layer)的类来管理。UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。

2.UIView有个layer属性,可以返回它的主CALayer实例,UIView有一个layerClass方法,返回主layer所使用的类,UIView的子类,可以通过重载这个方法,来让UIView使用不同的CALayer来显示,例如通过

[plain]view plaincopy
  1. -(class)layerClass{
  2. return[CAEAGLLayerclass];
  3. }

使某个UIView的子类使用GL来进行绘制。

3.UIView的CALayer类似UIView的子View树形结构,也可以向它的layer上添加子layer,来完成某些特殊的表示。例如下面的代码

[plain]view plaincopy
  1. grayCover=[[CALayeralloc]init];
  2. grayCover.backgroundColor=[[[UIColorblackColor]colorWithAlphaComponent:0.2]CGColor];
  3. [self.layeraddSubLayer:grayCover];

会在目标View上敷上一层黑色的透明薄膜。

4.UIView的layer树形在系统内部,被系统维护着三份copy(这段理解有点吃不准)。

第一份,逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份。

第二份,动画树,这是一个中间层,系统正在这一层上更改属性,进行各种渲染操作。

第三份,显示树,这棵树的内容是当前正被显示在屏幕上的内容。

这三棵树的逻辑结构都是一样的,区别只有各自的属性。

5.动画的运作

UIView的主layer以外(我觉得是这样),对它的subLayer,也就是子layer的属性进行更改,系统将自动进行动画生成,动画持续时间有个缺省时间,个人感觉大概是0.5秒。在动画时间里,系统自动判定哪些属性更改了,自动对更改的属性进行动画插值,生成中间帧然后连续显示产生动画效果。

6.坐标系系统(对position和anchorPoint的关系还是犯晕)

ps:CALayer采用的OpenGL的坐标系统。所以存在poistion和anchorPoint的双重属性。

CALayer的坐标系系统和UIView有点不一样,它多了一个叫anchorPoint的属性,它使用CGPoint结构,但是值域是0~1,也就是按照比例来设置。这个点是各种图形变换的坐标原点,同时会更改layer的position的位置,它的缺省值是{0.5, 0.5},也就是在layer的中央。

某layer.anchorPoint = CGPointMake(0.f, 0.f);

如果这么设置,layer的左上角就会被挪到原来的中间的位置,

加上这样一句就好了

某layer.position = CGPointMake(0.f, 0.f);

8.layer可以设置圆角显示,例如UIButton的效果,也可以设置阴影显示,但是如果layer树中的某个layer设置了圆角,树中所有 layer的阴影效果都将显示不了了。如果既想有圆角又想要阴影,好像只能做两个重叠的UIView,一个的layer显示圆角,一个的layer显示阴影.....

CoreAnimation-CALayer简述相关推荐

  1. CoreAnimation (CALayer 动画)

    CoreAnimation基本介绍: CoreAnimation动画位于iOS框架的Media层 CoreAnimation动画实现需要添加QuartzCore.Framework CoreAnima ...

  2. iOS 动画之CoreAnimation(CALayer)

    CoreAnimation基本介绍 CoreAnimation动画位于iOS框架的Media层 CoreAnimation动画实现需要添加QuartzCore.Framework CoreAnimat ...

  3. Swift CoreAnimation ---- CALayer的呈现层和模型层

    前言 自己的语言能力有限,借鉴别人的文章理解并写下这篇文章. 参考链接:iOS CoreAnimation专题--原理篇(三) CALayer的模型层与展示层 - 知乎 使用Swift语言,深入CAL ...

  4. 系列文章深度解读|SwiftUI 背后那些事儿

    原创 系列文章深度解读|SwiftUI 背后那些事儿 2019-06-24 17:30:00 淘宝技术 阅读数 216 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附 ...

  5. GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法

    1.GIF动画 1 // 创建一个显示图片的imageView // viewController创建 2 UIImageView *showGifImageView = [[UIImageView ...

  6. CoreAnimation动画(CALayer动画)

    1 #pragma mark - CABasicAnimation动画 2 - (IBAction)basicAnimation:(UIButton *)sender { 3 4 // 1.创建动画对 ...

  7. 【动画2】CALayer动画

    一)UIView动画 二)CoreAnimation动画 前言:上一篇已经介绍了UIKit给我们封装好的UIView动画的使用,UIKit动画是建立在CoreAnimation动画之上的,CoreAn ...

  8. CALayer(二)

    前言:本文涵盖了(1)绘制CALayer的三种方式(2)Layer Tree 一 提供CALayer内容的三种方式 把一个图像对象直接赋值给contents属性(这是提供CALayer内容的最好方式) ...

  9. iOS开发CoreAnimation解读之四——Layer层动画内容

    iOS开发CoreAnimation解读之四--Layer层动画内容 一.引言 通过前几篇博客的介绍,我们可以了解到layer层可以设置许多与控件UI相关的属性,并且对于iOS开发,UIView层的属 ...

  10. iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程

    iOS开发CoreAnimation解读之一--初识CoreAnimation核心动画编程 一.引言 二.初识CoreAnimation 三.锚点对几何属性的影响 四.Layer与View之间的关系 ...

最新文章

  1. ImageMagick convert
  2. Play Framework 2.2.6 安装
  3. 解决ECSHOP后台订单里面点击编辑配送方式时出现的警告问题
  4. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法
  5. web服务高级使用 Samba共享
  6. fiddler运行原理_全网最全最细的fiddler使用教程以及工作原理
  7. java uuid 效率_java uuid第一次性能
  8. 使用pt-heartbeat检测主从复制延迟
  9. 学习IDisposable,对于此中的不解……请高手指点
  10. SVN的trunk branch tag
  11. ios 替换数组中元素_leetcode169 数组中的主要元素
  12. xcode7中出现 dyld: Symbol not found: ___NSArray0__的错误
  13. 夜间模式(模仿喜马拉雅FM)
  14. GIS开发人员看过来—Esri的web开发技术趋势
  15. [Linux 高并发服务器] 信号
  16. 兄弟们,以后不能愉快的抽烟
  17. RFID定位技术在仓库管理中的应用--新导智能
  18. python 爬手机号_【Python爬虫】手机号网段爬虫
  19. python爬虫 - 爬取堆糖图片
  20. 通过xml方式根据word模板导出word

热门文章

  1. 在oracle数据库表中没有添加rowid字段为什么会出现?
  2. unity, destroy gameObject destroy all children
  3. sql server 与 oracle 的不同,第一感觉。
  4. post 下载文件 (excel)
  5. python中对两个 list 求交集,并集和差集
  6. linux命令(44):sed,vim;去掉文件中的^M 符号,去掉行首空格和制表符
  7. 什么是Hadoop,怎样学习Hadoop
  8. Android 创建一个新的Activity
  9. 【VMCloud云平台】SCSM(十)服务请求到资源落地
  10. C++隐式类类型转换