研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍。苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其实是假 设读的人了解界面动画技术的原理的。今天有点别的事情要使用Linux,忘掉了ssh的密码,没办法重新设ssh,结果怎么也想不起来怎么设ssh远程登 陆了,没办法又到网上查了一遍,太浪费时间了,痛感忘记记笔记是多么可怕的事情。鉴于Core Animation的内容实在是非常繁杂,应用的Obj-C语言本身的特性也很多,所以写个备忘录记录一下,懂的人看了后如果发现了错误,还不吝指教。

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

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

- (class) layerClass {return ([CAEAGLLayer class]);
}

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

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

grayCover = [[CALayer alloc] init];
grayCover.backgroundColor = [[[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor];
[self.layer addSubLayer: grayCover];

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

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

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

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

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

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

5.动画的运作

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

6.坐标系系统(对position和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);

7.真实例子的分析

这是iphone上iBook翻页的效果,假设每一页都是一个UIView,我觉得一个页面是贴了俩个Layer,文字Layer显示正面的内容, 背面layer用文字layer的快照做affine翻转,贴在文字layer的后面。因为Layer可以设置显示阴影,也许后面的阴影效果没有使用单独 的一个layer来显示。至于这个曲面效果,我查了很多资料也没有结果,估计是使用了GL的曲面绘图?

8.最后一个让人恶心的。

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

转载于:https://www.cnblogs.com/ligun123/archive/2011/09/18/2180473.html

calayer 与uiview相关推荐

  1. CALayer与UIView区别和联系【转】

    1.UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它.它本身完全是由CoreAnimation来实现的(Mac下似乎不是这样).它真正的绘图部分,是由一个叫CALayer(Core ...

  2. CALayer与UIView的关系

    CALayer属于Core Animation部分的内容,比较重要而不太好理解.以下是园子中看到的一篇文章的摘录: 1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它.它本身完 ...

  3. iOS核心动画CALayer和UIView

    UIView和CALayer的关系. 每一个UIview都有一个CALayer实例的图层属性,也就是所谓的backing layer. 实际上这些背后关联的图层才是真正用来在屏幕上显示和做动画,UIV ...

  4. 【好程序员笔记分享】——UIView与CALayer详解

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ UIView与CALayer详解 研究Core Animation已经有段时间了,关于Core Animati ...

  5. UI一揽子计划 23 (动画的使用场景、UIView动画、CGAffineTransform2D仿射变换、CALayer、CAAnimation、)

    在iOS 中的动画是指一些视图上的过渡效果,合理利用动画能提高用户体验. 一. UIView动画 1). UIView动画块的使用 ([UIView beginAnimations: nil cont ...

  6. iOS:CALayer核心动画层

    CALayer:核心动画层 简介: Core Animation 是跨平台的,支持iOS环境和Mac OS X环境 学习核心动画之前,需要先理解CALayer,因为核心动画操作的对象不是UIView, ...

  7. 从 CALayer 的 Position、AnchorPoint 说起

    本文 demo 地址 有的东西虽然基础,但是耐不住人老记性差呀,自己写下来好过次次再搜咯,so...... AnchorPoint 和 Position AnchorPoint anchorPoint ...

  8. iOS边练边学--CALayer,非根层隐式动画,钟表练习

    一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...

  9. UIViewController与UIView的关系

    haoxue 2010-11-21 21:30 iphone--UIViewController与UIView的关系 UIView翻转效果实现 新建一个view-based模板工程,在ViewCont ...

最新文章

  1. 使用Photoshop制作网页模板
  2. G面经prepare: Set Intersection Set Difference
  3. 前端学习(1947)vue之电商管理系统电商系统之使用自定义模板渲染
  4. java实现短信上行源码_Java 发送短信验证码 示例源码
  5. linux下嵌入式编译环境搭建,ubuntu系统下嵌入式开发环境搭建(ubuntu 16.04)
  6. 揭秘一家网络推广公司的引流变现套路
  7. 开源真实场景图像检测数据集汇总
  8. 【2016-2017 ACM-ICPC (ECNA 2016) G】That's one Hanoi-ed Teacher【汉诺塔问题】
  9. Codejock 19.x 定制Crack Version
  10. STM32笔记之 FLASH(内存)
  11. matlab电磁场,电磁场与波 电磁材料及MATLAB计算
  12. python数据中元素可以改变的是_下列Python数据中其元素可以改变的是( )。 (2.0分)_学小易找答案...
  13. server can;t find yao.com:SERVFAIL的原因
  14. [0892]《兽医内科学》主观题
  15. 手动生成MyEclipse注册码及序列号(源代码)
  16. 开发日记之linux杀进程与挂进程去后台运行
  17. VBA写入公式(2):日期公式集
  18. mysql绘制er图菱形表示什么意思_E-R图表示的是什么?
  19. Free Pascal 学习笔记 第五章 字符类型 Character Types
  20. Python 主流棋牌游戏 服务端 框架分析 原创笔记

热门文章

  1. 一个网站的诞生- MagicDict开发总结2 [ACCESS的烦恼]
  2. Javascript高级程序设计第二版第十四章--异常--笔记
  3. 2008年12月答疑贴
  4. python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...
  5. Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系
  6. java tomcat自动安装教程_Tomcat:基础安装和使用教程
  7. autojs遍历当前页面所有控件_PyQT5控件:容器(Containers Widgets)
  8. 核心API最佳实践——JDK日志分级
  9. mysql 重置密码模式_mysql--重置密码
  10. nvme通用驱动_对领域驱动设计的理解与实践