http://www.cnblogs.com/CHONGCHONG2008/archive/2012/08/03/2621410.html
Core Animation基础
有关Core Animation的进一步概述、对象树、以及如何创建动画,请参见Core Animation编程指南。
改变视图的层
在iPhone OS系统中,由于视图必须有一个与之关联的层对象,所以UIView
类在初始化时会自动创建相应的层。您可以通过视图的layer
属性访问这个层,但是不能在视图创建完成后改变层对象。
动画支持
有关如何通过UIView
类创建动画的更多信息,请参见“实现视图动画”部分;有关如何创建显式动画的更多信息,则请参见Core Animation编程指南。
视图坐标系统
更多有关坐标系统、Quartz、和描画的一般信息,请参见“图形和描画”部分。
边框、边界、和中心的关系
虽然您可以分别设置这些属性的值,但是设置其中的一个属性会引起其它属性的改变,具体关系如下:
坐标系统变换
有关如何在drawRect:
方法中使用变换的信息,请参见“坐标和坐标变换”部分;有关用于修改CGAffineTransform
结构的函数,则请参见CGAffineTransform参考。
内容模式与比例缩放
自动尺寸调整行为
图2-8为这些常量值的位置提供了一个图形表示。如果这些常量之一被省略,则视图在相应方向上的布局就被固定;如果某个常量被包含在掩码中,在该方向的视图布局就就灵活的。
自动尺寸调整行为可以适合一些布局的要求,但是如果您希望更多地控制视图的布局,可以在适当的视图类中重载layoutSubviews
方法。有关视图布局管理的更多信息,请参见“响应布局的变化”部分。
创建和管理视图层次
图2-9显示了一个简单的例子,说明如何通过视图的分层来创建期望的视觉效果。在Clock程序中,页签条和导航条视图,以及定制视图混合在一起,实现了整个界面。
如果您探究Clock程序中视图之间的关系,就会发现它们很像“改变视图的层”部分中显示的关系,窗口对象是应用程序的页签条、导航条、和定制视图的根视图。
创建一个视图对象
CGRect viewRect = CGRectMake(0, 0, 100, 100); |
UIView* myView = [[UIView alloc] initWithFrame:viewRect]; |
添加和移除子视图
您可以通过视图的window
属性来取得指向其父窗口(如果有的话)的指针,如果视图还没有被链接到窗口上,则该属性会被设置为nil
。
视图层次中的坐标转换
标识视图
您可以通过UIView
的viewWithTag:
方法来检索标识过的视图。该方法从消息的接收者自身开始,通过深度优先的方法来检索接收者的子视图。
在运行时修改视图
实现视图动画
配置动画的参数
除了在动画块中改变属性值之外,您还可以对其它参数进行配置,以确定您希望得到的动画行为。为此,您可以调用下面这些UIView
的类方法:
-
用
setAnimationStartDate:
方法来设置动画在commitAnimations
方法返回之后的发生日期。缺省行为是使动画立即在动画线程中执行。 -
用
setAnimationDelay:
方法来设置实际发生动画和commitAnimations
方法返回的时间点之间的间隔。 -
用
setAnimationCurve:
方法来设置动画过程的相对速度,比如动画可能在启示阶段逐渐加速,而在结束阶段逐渐减速,或者整个过程都保持相同的速度。
配置动画的委托
- (void)animationWillStart:(NSString *)animationID context:(void *)context; |
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context; |
上面两个方法的animationID和context参数和动画块开始时传给beginAnimations:context:
方法的参数相同:
setAnimationDidStopSelector:
选择器方法还有一个参数—即一个布尔值。如果动画顺利完成,没有被其它动画取消或停止,则该值为YES
。
响应布局的变化
子视图的初始布局由视图的自动尺寸调整行为来负责。应用这些行为可以保证您的视图接近其设计的尺寸。有关自动尺寸调整行为如何影响视图的尺寸和位置的更多信息,请参见“自动尺寸调整行为”部分。
重画视图的内容
实现drawRect:
方法的视图总是需要检查传入的矩形参数,并用它来限制描画操作的范围。因为描画是开销相对昂贵的操作,以这种方式来限制描画是提高性能的好方法。
隐藏视图
创建一个定制视图
本章的下面部分将描述一些定制视图对象可能需要实现的关键方法和行为。有关子类化的更多信息,请参见UIView类参考。
初始化您的定制视图
您定义的每个新的视图对象都应该包含initWithFrame:
初始化方法。该方法负责在创建对象时对类进行初始化,使之处于已知的状态。在通过代码创建您的视图实例时,需要使用这个方法。
- (id)initWithFrame:(CGRect)aRect { |
self = [super initWithFrame:aRect]; |
if (self) { |
// setup the initial properties of the view |
... |
} |
return self; |
} |
描画您的视图内容
响应事件
处理触摸事件的视图通常需要实现下面的所有方法,更多细节请参见“事件处理”部分:
视图对象的清理
- (void)dealloc { |
// Release a retained UIColor object |
[color release]; |
// Call the inherited implementation |
[super dealloc]; |
} |