没有合适的资源?快使用搜索试试~ 我知道了~
首页iOS Core Animation编程详解:创建高效动画与图层管理
iOS 核心动画编程是一份深入介绍在苹果iOS开发中使用Core Animation框架进行动画编程的文档。该文档主要针对已经熟悉Objective-C基础和键-值编程方法的开发者,尤其是对Quartz2D有一定了解的开发者,因为它提供了一套高性能的动画系统,使得创建流畅、高效的UI效果变得更加容易。 文档首先概述了核心动画的概念,包括核心动画的主要类,如图层类、动画和计时类、布局管理器类以及事务管理类。图层类是动画的核心,涉及到图层的坐标系、几何设定、变换操作,如平移、旋转和缩放。图层树的层次结构是关键,展示了如何在视图中管理和调整图层的位置、大小以及裁剪。 图层内容的提供是另一个重要部分,包括设置contents属性、通过代理或子类提供内容,以及调整图层内容的位置。动画则是文档的重点,区分了隐式动画(由系统自动处理)和显式动画(需要手动调度),并详细讲解了开始和结束动画的方法。 核心动画的行为对象,如行为键值和采用CAACTION协议,也得到了深入探讨。事务管理是确保动画执行顺序和一致性的重要工具,包括隐式事务和显式事务,以及事务的嵌套。 最后,章节专门讨论了约束布局管理器在核心动画中的应用,帮助开发者实现响应式的UI布局,使应用能够适应不同屏幕尺寸和设备特性。 这份文档对于想要在iOS平台上实现复杂动画效果的开发者来说,是一份不可或缺的参考资料,它不仅介绍了基础知识,还提供了实际操作和高级技巧的指导。通过阅读和实践,开发者可以提升iOS应用的视觉表现和用户体验。
资源详情
资源推荐
Core Animation Programming Guide
第三章 图层的几何和变换
本章介绍图层的几何组成部分,及他们之间的相互关,同时介绍如何变换矩阵可
以产生复杂的视觉效果。
3.1 图层的坐标系
图层的坐标系在不同平台上面具有差异性。在 iOS 系统中,默认的坐标系统原点
在图层的中心左上角地方,原点向右和向下为正值。在 Mac OS X 系统中,默认的坐
标系原点在图层的中心左下角地方,原点向右和向上为正值。坐标系的所有值都是浮
点类型。你在任何平台上面创建的图层都采用该平台默认的坐标系。
每个图层定义并维护自己的坐标系,它里面的全部内容都由此相关的坐标系指定
位置。该准则同时适应于图层自己的内容和它的任何子图层。因为任何图层定义了它
自己的坐标系,CALayer 类供相应的方法用于从一个图层坐标系的点、矩形、大小
值转化为另一个图层坐标系相应的值。
一些基于图层的属性使用单元坐标空间测量它们的值。单元坐标空间指定图层边
界的相对值,而不是绝对值。单元坐标空间给定的x和y的值总是在 0.0 到 1.0 之间。
指定一个沿 X 轴的值为 0.0 的点,得到的是图层左边缘的一个点,而指定一个 1.0
的点,则是图层右边缘的一个点。(对 Y 轴而言,如果是在 iOS 系统,则 0.0 对应于
顶部的点,而 1.0 则是底部的点,而在 Mac OS X 系统,得到的刚好相反,就如之前
到的坐标系不同一样)。而点(0.5,0.5)则刚好是图层的中心点。
3.2 指定图层的几何
虽然图层和图层树与视图和视图的结构在很多方面具有相似性,但是图层的几何
却不同,它更加简单通俗。图层的所有几何属性,包括图层的矩阵变换,都可以隐式
和显式动画。
下图显示可以在上下文中指定图层几何的属性:
2011-11-14 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [9]
Core Animation Programming Guide
Figure 1 CALayer geometry properties
图层的 position 属性是一个 CGPoint 的值,它指定图层相当于它父图层的位置,
该值基于父图层的坐标系。
图层的 bounds 属性是一个 CGRect 的值,指定图层的大小(bounds.size)和图层的
原点(bounds.origin)。当你重写图层的重画方法的时候,bounds 的原点可以作为图形
上下文的原点。
图层拥有一个隐式的 frame,它是 position,bounds,anchorPoint 和 transform 属性
的一部分。设置新的 frame 将会相应的改变图层的 position 和 bounds 属性,但是 frame
本身并没有被保存。但是设置新的 frame 时候,bounds 的原点不受干扰,bounds 的大
小变为 frame 的大小,即 bounds.size=frame.size。图层的位置被设置为相对于锚点
(anchor point)的适合位置。当你设置 frame 的值的时候,它的计算方式和 position、
bounds、和 anchorPoint 的属性相关。
图层的 anchorPoint 属性是一个 CGPoint 值,它指定了一个基于图层 bounds 的符
合位置坐标系的位置。锚点(anchor point)指定了 bounds 相对于 position 的值,同
时也作为变换时候的支点。锚点使用单元空间坐标系表示,(0.0,0.0)点接近图层
的原点,而(1.0,1.0)是原点的对角点。改变图层的父图层的变换属性(如果存在
的话)将会影响到 anchorPoint 的方向,具体变化取决于父图层坐标系的 Y 轴。
当你设置图层的 frame 属性的时候,position 会根据锚点(anchorPoint)相应的改
变,而当你设置图层的 position 属性的时候,bounds 会根据锚点(anchorPoint)做相应
的改变。
iOS 注意:以下示例述基于 Mac OS X 的图层,它的坐标系原点基于左下角。在 iOS 上面,
图层的坐标系原点位于左上角,原点向下和向右为正值。这变化用具体数值显示,而不是概念
2011-11-14 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [10]
Core Animation Programming Guide
述。
下图述了基于锚点的三个示例值:
Figure 2 Three anchorPoint values
anchorPoint 默认值是(0.5,0.5),位于图层边界的中心点(如上图显示),B 点
把 anchorPoint 设置为(0.0,0.5)。最后 C 点(1.0,0.0)把图层的 position 设置为
图层 frame 的右下角。该图适用于 Mac OS X 的图层。在 iOS 系统里面,图层使用不
同的坐标系,相应的(0.0,0.0)位于左上角,而(1.0,1.0)位于右下角。
图层的 frame、bounds、position 和 anchorPoint 关系如下图所示:
Figure 3 Layer Origin of (0.5,0.5)
在该示例中,anchorPoint 默认值为(0.5,0.5),位于图层的中心点。图层的 position
值为(100.0,100.0),bounds 为(0.0,0.0,120,80.0)。通过计算得到图层的 frame
2011-11-14 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [11]
Core Animation Programming Guide
为(40.0,60.0,120.0,80.0)。
如果你新创建一个图层,则只有设置图层的 frame 为(40.0,60.0,120.0,80.0),
相应的 position 属性值将会自动设置为(100.0,100.0),而 bounds 会自动设置为
(0.0,0.0,120.0,80.0)。
下图显示一个图层具有相同的 frame(如上图),但是在该图中它的 anchorPoint
属性值被设置为(0.0,0.0),位于图层的左下角位置。
Figure 4 Layer Origin of (0.0,0.0)
图层的 frame 值同样为(40.0,60.0,120.0,80.0),bounds 的值不变,但是图层的
position 值已经改变为(40.0,60.0)。
图层的几何外形和 Cocoa 视图另外一个不同地方是,你可以设置图层的一个边角
的半径来把图层显示为圆角。图层的 cornerRadius 属性指定了重绘图层内容,剪切子
图层,绘制图层的边界和阴影的时候时候圆角的半径。
图层的 zPosition 属性值指定了该图层位于 Z 轴上面位置,zPosition 用于设置图层
相对于图层的同级图层的可视位置。
3.3 图层的几何变换
图层一旦创建,你就可以通过矩阵变换来改变一个图层的几何形状。
CATransform3D 的数据结构定义一个同质的三维变换(4x4 CGFloat 值的矩阵),用于
图层的旋转,缩放,偏移,歪斜和应用的透视。
图层的两个属性指定了变换矩阵:transform 和 sublayerTransform 属性。图层的
transform 属性指定的矩阵结合图层的 anchorPoint 属性作用于图层和图层的子图层上
面。图 3 显示在使用 anchorPoint 默认值(0.5,0.5)的时候旋转和缩放变换如何影响一
2011-11-14 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [12]
剩余75页未读,继续阅读
一世伏尘
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- zlib-1.2.12压缩包解析与技术要点
- 微信小程序滑动选项卡源码模版发布
- Unity虚拟人物唇同步插件Oculus Lipsync介绍
- Nginx 1.18.0版本WinSW自动安装与管理指南
- Java Swing和JDBC实现的ATM系统源码解析
- 掌握Spark Streaming与Maven集成的分布式大数据处理
- 深入学习推荐系统:教程、案例与项目实践
- Web开发者必备的取色工具软件介绍
- C语言实现李春葆数据结构实验程序
- 超市管理系统开发:asp+SQL Server 2005实战
- Redis伪集群搭建教程与实践
- 掌握网络活动细节:Wireshark v3.6.3网络嗅探工具详解
- 全面掌握美赛:建模、分析与编程实现教程
- Java图书馆系统完整项目源码及SQL文件解析
- PCtoLCD2002软件:高效图片和字符取模转换
- Java开发的体育赛事在线购票系统源码分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功