iOS酷炫的动画效果可以很好的增强用户体验。在iOS开发中实现动画的方式有多种,一般而言,简单的动画使用UIKit框架封装的动画便已足够。UIKit框架将这些动画集成到了UIView上, 即接下来要讲的UIView动画。
当UIView内部的属性发生变化时,UIView动画将为这些属性变化提供动画效果。UIView动画支持的属性有:frame,bounds,center,alpha,backgroundColor,transform等。
UIView动画有两种实现方式:首尾式和block方式。
首尾式
首尾式的动画代码必须放在 beginAnimations 和 commitAnimations 之间。
[UIViewbeginAnimations:nilcontext:nil];
//需执行的动画代码
[UIViewcommitAnimations];
常用的设置UIView动画属性的方法:
// 设置代理对象,可以监听动画即将开始和已经结束
+ (void)setAnimationDelegate:(nullableid)delegate; // default = nil
+ (void)setAnimationWillStartSelector:(nullableSEL)selector; // default = NULL.
+ (void)setAnimationDidStopSelector:(nullableSEL)selector; // default = NULL.
// 设置动画时长
+ (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2
// 设置动画延迟执行
+ (void)setAnimationDelay:(NSTimeInterval)delay;// default = 0.0
// 设置动画节奏,参数是枚举类型,有四种类型
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut
// 设置动画重复次数
+ (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0.May be fractional
// 设置动画是否进行反转(逆向回去)
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO.
// 设置UIView的过渡类型
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView*)view cache:(BOOL)cache;
跑在模拟器上可以使用菜单栏 --> Debug --> Slow Animations (快捷键:cmd + T),观看放慢的动画执行效果。
UIViewAnimationCurve枚举值(控制动画的节奏):
UIViewAnimationCurveEaseInOut, // 开始和结束缓慢 (默认值)
UIViewAnimationCurveEaseIn, // 开始缓慢
UIViewAnimationCurveEaseOut, // 结束缓慢
UIViewAnimationCurveLinear, // 匀速
UIViewAnimationTransition枚举值(设置UIView的过渡效果):
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft, // 从左往右翻转
UIViewAnimationTransitionFlipFromRight, // 从右往左翻转
UIViewAnimationTransitionCurlUp, // 从下往上卷曲(翻页)
UIViewAnimationTransitionCurlDown, // 从上往下卷曲(翻页)
block方式
从iOS 4.0开始,苹果提供了block的方式的UIView动画,使用更加简单。
// 动画立刻执行,默认动画节奏为UIViewAnimationOptionCurveEaseInOut
// UIView的过渡方式为UIViewAnimationOptionTransitionNone
[UIViewanimateWithDuration:0.2 animations:^{
//动画代码
}];
// 该动画方法带有动画执行完的block回调
[UIView animateWithDuration:0.2 animations:^{
//动画代码
} completion:^(BOOLfinished) {
//动画执行完的操作
}];
// 该动画方法带有延迟执行的参数
[UIView animateWithDuration:0.2 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{
//动画代码
} completion:^(BOOLfinished) {
//动画执行完的操作
}];
/*
弹簧动画,iOS 7.0提供
第三个参数:可以理解为阻尼系数,取值0 - 1,越接近于0,阻尼越大,弹力越大
第四个参数:初始弹簧速度,值越大,初始弹簧速度越快
*/
[UIView animateWithDuration:0.2 delay:0.1 usingSpringWithDamping:0.5 initialSpringVelocity:5 options:UIViewAnimationOptionCurveEaseOut animations:^{
//动画代码
}completion:^(BOOLfinished) {
//动画执行完的操作
}];
// 关键帧动画,iOS 7.0提供
[UIView animateKeyframesWithDuration:0.2 delay:0.1 options:UIViewKeyframeAnimationOptionRepeat animations:^{
//动画代码
} completion:^(BOOLfinished) {
//动画执行完的操作
}];
可以为UIView添加关键帧,方法如下:
[UIView addKeyframeWithRelativeStartTime:(double)frameStartTime relativeDuration:(double)frameDuration animations:^{
}]
如有错误和不足,欢迎指正。