使用UIView实现视图的转场动画

1. 声明动画块(animation Block)

[UIView beginAnimations:@"View Flip" content:NULL];

beginAnimations: content:方法接受两个参数,第一个是动画块标题,只有在更直接地使用Core Animation(即用于实现动画的框架)时才会用到这个标题,对于上面的实例,可以使用nil替换。第二个参数是一个指针,指向关联到这个动画快的对象(或者任何C语言数据类型)。这里使用空数据(NULL或者nil),因为没有必要指定对象。

2. 指明动画的持续时间

[UIView setAnimationDuration:0.25];

类方法setAnimationDuration:设定了动画的持续时间,它告诉了 UIView 动画应该运行多长时间(以秒为单位)。

3. 设置动画曲线(animation curve)

[UIView setAnimationCure:UIViewAnimationCureEaseInOut];

这决定了动画的运行速度。默认情况下,动画曲线是一条线性曲线,使动画匀速运行。示例中的UIViewAnimationCureEaseInOut指定了“慢速开始,中间加速,慢慢停止”。这样动画看起来会更加自然,不那么呆板。

4. 指定要使用的转场动画类型

[UIView setAnimationTransition:UIViewAnimationFlipFromRight forView:xxxView cache:YES];

在写此篇博客时,iOS提供了5种视图转场类型:

typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,  //一个视图突然变成另一个视图(若需要此种效果,根本无需创建一个动画快)
    UIViewAnimationTransitionFlipFromLeft,  // 左侧翻入
    UIViewAnimationTransitionFlipFromRight,  // 右侧翻入
    UIViewAnimationTransitionCurlUp,  // 向上卷起
    UIViewAnimationTransitionCurlDown,  // 向下卷起
};

cache会在动画开始生成一个快照,并在动画执行过程的每一步使用这个快照(对这个快照做动画变换),而不是重新绘制视图。应该始终对动画进行缓存(也就是说此参数应该始终传 YES),除非视图外观在动画执行过程中需要改变。

5. 调用 commitAnimations 方法

typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    [UIView commitAnimations];
};

在第一步创建动画块开始一直到调用commitAnimations,中间所有的动作都会被制成动画。
由于 Cocoa Touch 在后台使用了 Core Animation(说人话其实就是底层封装了 Core Animation),所以我们能够使用极少的代码制作出非常复杂而精美的动画。

发表评论

邮箱地址不会被公开。 必填项已用*标注