- 浏览: 773819 次
- 性别:
- 来自: 天堂
文章分类
最新评论
-
xiaozhao-521:
呀呀呀呀呀呀呀
RequestTest222 -
Andy_hyh:
打扰了,问下openmeeting源码可以运行起来吗?
Openmeetings安装 详细步骤 -
qindongliang1922:
擦,现在还行么,厉害
北京免费吃饭的地方 -
minixx77:
...
Openmeetings安装 详细步骤 -
wwwqqqiang:
喜欢楼主分享问题的方式,有思想
UIView 和 CALayer的那点事
第一章 Core animation简介
1. 简介
Core animation 是以objc语言封装的一套图形渲染,投影及动画的库的集合。
Core animation 使创建用户界面变得非常容易,通过以下方法:
1. 使用简单的编程方法实现高性能的合成
2. 使用层对象创建复杂的用户界面
3. 轻量型数据结构,能够同时使几百个层产生动画。
4. 不依赖于应用程序主线程,动画在单独的线程里运行。
5. 改进了应用程序性能。应用程序只需要重画它变化的部分(局部刷新)。
6. 灵活的布局管理模式。
2. 相关类
使用core animation,开发者不需要使用底层的API或者OpenGL就可以创建漂亮的动画界面。
core animation类分成以下几个:
1. 提供显示内容的层(layer)。
2. 动画和时间类(Animation and timing classes)。
3. 布局和约束类(Layout and constraint classes)。
4. 将多个层分成几个原子更新的执行类。
2.1 层(layrer)
层是 core animation的基础。视图(UIView)的一个实例,有一个CALayer实例做为父层(superlayer) 以及在这层上添加的所有子层,创建的层结构称为layer tree(层之间的结构像一颗树)。在画层时,所有的层指定一个相对于父层的坐标,然后从最后一层往前画,就像画视图一样。层允许更复杂的转换,比如旋转,倾斜,放大缩小,投影层的内容。
层还管理与其相关的动画和作用(action,这里翻译不形象,高手请指教)。从layer tree中插入或者删除层,修改层的属性以及应用程序请求都会触发动画发生。
2.2动画和时间类
隐式动画
层的许多可视属性的改变可以产生隐式的动画效果,因为这些属性都默认地与一个动画相关联。通过简单地设置可视的属性值,层会由当前值到被设置的值产生渐变的动画效果。比如,设置层的隐藏属性为真,将触发一个逐渐消失的动画效果。
显式动画
可设置动画的属性也可以产生显式的动画效果,通过创建一个动画类和指定所需要的动画效果。显式的动画并不改变层的属性。
所有的核心动画类都由抽象类CAAnimation继承而来。CAAnimation采用CAMediaTiming协议。 CAMediaTiming规定了动画的持续时间,速度及重复次数。CAAnimation也采用了CAAction协议,该协议规定了在响应由层触发的动作时,开始一个动画的标准方式。
核心动画还提供了其它 的动画类:
CATransition。CATransition规定了影响整个层内容的转换效果。在动画期间,它使层产生渐变(fade),推拉(push)以及揭示(reveal)的动画效果。这些常用的转换效果可以通过核心绘图过滤器进行扩展。
核心绘图过滤器相关中文链接: http://www.apple.com.cn/developer/Documentation/GraphicsImaging/Conceptual/CoreImaging/index.html
CAAnimation。CAAnimation允许大量的动画对象被分成几组,并且可以同时运行。
CAPropertyAnimation 。是CAAnimation 的子类,支持层在动画期间,为层指定一个关键路径。
CABasicAnimation。该类为层的属性提供了简单的插值。(我理解为:由于要产生动画,因此为了使在开始和结束期间产生动画,要为层属性所设置的区间值插入其它的值。)
CAKeyframeAnimation。 CAKeyframeAnimation提供关键帧动画的支持。你可以为可设置动画的层的属性指定一个关键路径,路径可以是一个数组,保存了动画每个阶段的 值,和关键帧的动画次数及时间函数。当动画运行时,在插值时,每个值会被轮流使用。
2.3布局管理类:
CAKeyframeAnimation类用于管理所有子层的布局。每个由CAConstraint类封装的实例描述了各子层之间的几何位置关系。
2.4执行管理类
可设置动画层的属性的修改必须是执行的一部分。CATransaction负责将许多动画分成几批原子型的更新进行显示。
3. 类层次图
第二章 核心动画渲染架构
核心对象的层和cocoa的视图非常相似,但是最大的区别是:层不直接渲染到屏幕。
在MVC设计模式中,视图明显是V对象,而层是M对象。层封装了布局,时序,可视的属性并且提供用于显示的内容,但是显示却不是层的职责。
每个可视的层是由两个相应的树支持的:一个presentation tree和一个render tree.
核心动画渲染架构图:
[attachment=5628]
Layer tree包含每个层的数据模型值(可设置动画的层属性)。
Presentation tree包含动画发生时,展现给用户的层属性值。
渲染整个层时,render tree将使用presentation tree的属性值。Render tree负责实现复合操作,它不依赖于应用程序主循环,它将在独立的进程或线程中执行。
这章节主要描述层坐标的构成要素,构成要素之间的关系及如何转换产生复杂的效果。
1 层坐标系统
层坐标使用了和Quanz图形一样的坐标系统。默认情况下,原点(0.0, 0.0)在左下角,向右及向上增长。请注意:该坐标系统是不同于UIView实例的坐标系统,UIView系统的原点在左上角,向右及向下增长。每个层的实例都维护自己的坐标系统,定位所有的子层及绘图时都是相对于这个坐标系统。
2 层的几何坐标
层的几何坐标系统图:
[attachment=5699]
2.1 Bounds
没有人不知道这东东,跳过。
2.2 Position
CGPoint类型,指定了相对于父层(superlayer)的位置,由父层的坐标系统来表示。
2.3 Frame
改变层的frame时,层的position和bounds会相应的改变,但层并没有frame属性,它是由层的position, bounds, anchorPoint(参照点) 和transform计算而来。
2.4 Anchor point 参照点
今天的重点属性。一定要理解。该属性是在层的bounds范围内的一个点,值为0.0到1.0。所有的转换都是相对于这个点进行计算的。
下图是三个anchor point的值:
[attachment=5700]
接下来,我们来看一下frame, bounds, position 及 anchorPoint之间的关系。
如下图:
[attachment=5701]
在这个图中,anchor point的默认值为(0.5,0.5),相当于层的中心。如果你设置frame为(40.0, 60.0, 120.0, 80.0),则position值会被自动设置为(100,100)。我们还可以看到旋转和缩放的转换计算都是相对于参照点进行的。
下图的frame的大小和图3是一样的,但是anchor point为(0.0,0.0):
[attachment=5702]
2.5 cornerRadius
当要绘图,剪辑子层,画边框及阴影时,可以指定层所使用的半径大小以产生圆角效果。
3 层的几何坐标转换
上面讲了那么多,都是为这一小节坐铺垫的。
CATransform3D结构体定义了一个用于旋转,缩放,偏移,倾斜及应用透视变换
的三维坐标变换。原型如下:
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
可以将该结构体赋值给层的两个属性transform 或者sublayerTransform,就可以实现坐标转换。
你可以通过以下三个方法来创建和修改这个结构体:
1) 使用CATransform3D函数获取
2) 直接修改结构体数据成员
3) 使用键值编码和键路径(key paths)
3.1 转换函数
3.1.1 平移,缩放及旋转转换函数(以下如何进行坐标转换计算实在是看不懂,线性代数太滥了,真后悔当初没好好学,^&^。高手请指教):
[attachment=5703]
示例:
reflectionLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0);
该函数使层的Y坐标反转,产生倒影效果。
论谈里有一个关于CATransform3DMakeScale矩阵转换的使用例子,大家可以看一下,对于理解矩阵转换还是很有帮助的,地址:http://www.cocoachina.com/macdev/ca/2009/0611/33.html
系统也提供了反转矩阵的函数CATransform3DInvert。
3.1.2 仿射转换函数:
[attachment=5704]
3.1.3 测试是否是相等的函数:
[attachment=5705]
3.2 使用键路径(key paths)修改转换函数
[attachment=5706]
示例:
myLayer.transform.rotation.x=0;
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];
发表评论
-
iOS 自定义UIActionSheet
2012-12-18 16:07 16424一:模态视图 UIActi ... -
UIView 和 CALayer的那点事
2012-11-17 23:51 30782UIView 和 CALayer的那点事 (1 ... -
iOS Open Source : Popover API for iPhone
2012-01-20 15:02 1948http://iphonedevelopertips.com/ ... -
ios 任务、线程、定时器
2011-12-26 18:09 8032一:operations(任务) cocoa提供了三种 ... -
ios url缓存策略——NSURLCache、 NSURLRequest
2011-12-26 17:09 24360一:url 缓存策略 NSURLRequest ... -
ios NSInvocation简单使用
2011-12-22 16:39 6379在ios直接调用某个对象的消息是方法有两种: 一:perfo ... -
iphone 对Web Services的三种请求方式soap get post
2011-11-09 10:57 6444一:Using SO AP 1.1 POST / ... -
sdk3.2手势实例
2011-11-09 10:11 1747#import <UIKit/UIKit.h>@i ... -
关于iphone 利用hpple解析html的问题
2011-08-04 18:28 2229最近在用happe解析html中的图片。有个翻页操作,如果请 ... -
iphone hpple 解析html,xml
2011-07-19 16:21 2755使用Objective-C解析HTML或者XML,系统自带有两 ... -
激活 iPhone通过 GPRS 连接服务器功能的代码
2011-05-13 15:14 1663如果您的 iPhone 应用里含有连接服务器的功能,也许会遇到 ... -
address book api 图型
2011-04-28 15:51 1151最近要搞地址簿了,整理一下 -
[OmniGraffle]iPhone app原型制作工具
2011-04-06 17:35 3962在写程序之前,我们通常需要做一些mockup出来(不知道款爷有 ... -
自定义uislider 样式
2011-04-04 21:28 3844UIImage *stetchLeftTrack= [[UII ... -
iphone 下AsyncSocket网络库编程
2011-04-02 21:04 7647iphone的标准推荐CFNetwork ... -
进阶AlertView运用 - 登入设计
2011-04-01 17:52 3043说明:示范如何利用AlertView来制作系统登入的介面程式碼 ... -
iPad UIPopoverController弹出窗口的位置和坐标
2011-04-01 17:42 2008优化规则: TodoViewControlle ... -
iPhone系统自动化测试
2011-04-01 17:39 2624首先mac系统是必备的2 安装iPhone SD ... -
iphone上面编写具有root权限的程序
2011-04-01 17:31 6302正常途径下, 我们编写的程序发布在App store上, 使用 ... -
聊天。。。。。
2011-04-01 17:13 1095是得分手段
相关推荐
### Core Animation:构建引人入胜的动态用户界面 #### 核心概念与技术背景 在探讨《Core Animation for Mac OS X and the iPhone》一书之前,我们需要了解几个关键概念和技术背景。 - **Core Animation**:是...
**核心动画编程指南**是苹果公司为iOS和Mac OS X开发者提供的一份重要参考资料,它深入解析了Core Animation框架的使用方法和核心技术。Core Animation是苹果操作系统中的一个关键图形渲染技术,它允许开发者创建高...
《Core Animation for Mac OS X and the iPhone》是深入探讨苹果平台动画技术的重要参考资料,主要针对Mac OS X和iOS操作系统。Core Animation是Apple提供的一种强大的图形渲染和动画框架,它允许开发者创建流畅、...
Core Animation是苹果公司为其操作系统macOS和iOS提供的一项强大的图形渲染和动画技术。它是一个低级别的框架,用于创建丰富的、高性能的2D和3D视觉效果。Core Animation在应用程序的用户界面(UI)中扮演着核心角色...
Core Animation是iOS开发中一个强大的框架,用于创建各种丰富的视觉效果和动画。它不仅限于基本的移动和变换,还能实现复杂的2D和3D图形渲染。本教程将引导初学者掌握Core Animation的核心概念和使用技巧,从而在iOS...
iOS Core Animation是苹果公司为iOS设备提供的一个强大的动画框架,它是UIKit框架的一部分,可以用来创建流畅且丰富的视觉效果。本文将从iOS Core Animation的基础知识讲起,逐步深入探讨其中的核心概念、高级技术和...
核心动画(Core Animation)是Apple开发的一个强大的图形和动画框架,主要应用于iOS和macOS操作系统。这个"core animation advanced techniques源码"包含了深入利用Core Animation实现复杂和高性能动画的实例和示例...
《iOS-CoreAnimation》是苹果平台下用于构建动态、交互式用户界面的核心技术之一。它是一个高性能的图形渲染和动画引擎,旨在快速、高效地组合和更新屏幕上的视觉元素,为iOS应用提供流畅、绚丽的动画效果。Core ...
在iOS开发中,Core Animation是苹果提供的一种强大的图形渲染技术,用于创建丰富的视觉效果和流畅的动画。这个“ios-CoreAnimation核心动画学习.zip”压缩包很可能是为了帮助开发者深入理解并掌握Core Animation的...
Core Animation是苹果操作系统中最核心的动画框架之一,主要用于在iOS和macOS平台上创建流畅、高性能的2D图形和动画效果。这个"CoreAnimation-demo.zip"压缩包文件显然包含了一些示例代码,旨在演示如何使用Core ...
### iOS Core Animation 高级技巧知识点解析 #### 一、Introduction **图层的树状结构** - **图层树**: Core Animation的核心在于其管理的图层树结构,这是一种层次化的表示方式,其中每个节点都是一个`CALayer`...
《iOS Core Animation:Advanced Techniques》是一本专注于iOS平台核心动画技术的高级开发指南。核心动画是iOS系统中用于创建丰富视觉效果和动态用户界面的关键框架,它为开发者提供了强大的工具来构建流畅、交互性...