UIView简单动画
//开始一个动画块
[UIView beginAnimations:@"View1" context:nil];
//设置是否激活动画
[UIView setAnimationsEnabled:YES];
//设置在动画块内部动画属性改变开始的时间
[UIView setAnimationStartDate:(NSDate*)startTime];
//设置动画块中的动画持续时间(用秒)
[UIView setAnimationDuration:0.5];
//设置动画块中的动画属性变化的曲线
//UIViewAnimationCurveEaseInOut 开始和结束时动画效果比较慢
//UIViewAnimationCurveEaseIn 开始动画效果比较慢
//UIViewAnimationCurveEaseOut 结束动画效果比较慢
//UIViewAnimationCurveLinear 平滑的动画效果
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//设置动画块中的动画效果是否自动重复播放
[UIView setAnimationRepeatAutoreverses:NO];
//设置动画在动画模块中的重复次数
[UIView setAnimationRepeatCount:5];
//设置动画从当前状态开始
[UIView setAnimationBeginsFromCurrentState:YES];
//设置动画消息的代理
[UIView setAnimationDelegate:self];
//设置消息给动画代理当动画开始的时候
[UIView setAnimationWillStartSelector:@selector(resizeAnimationWillStart:context)];
//设置消息给动画代理当动画停止的时候
[UIView setAnimationDidStopSelector:@selector(resizeAnimationDidStop:finished:context)];
//在动画块中为视图设置过渡
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
//显示在最前面
[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
//结束动画
[UIView commitAnimations];
页面之间的过度主要依靠UIView setAnimationTransition: forView:cache: 这个方法以及exchangeSubviewAtIndex:withSubviewAtIndex:
前者通过UIView静态方法设置过度的动画种类,后者实现真正的过度函数掉用.种类有如下五种:
typedef enum {
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;
一个卷入卷出的小例子
if (tag == 0) {
//在动画块中为视图设置过渡
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:viewOne cache:YES];
viewOne.hidden = YES;
}else {
//在动画块中为视图设置过渡
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewOne cache:YES];
viewOne.hidden = NO;
}
*另外所有的CGAffineTransform都可以放置在动画块中,动画块会自动为仿射变化生成动画
Core Animation
除了这种简单的动画方式外,其实还有一种利用QuartzCore来做过度动画.不同的地方在于,这个过度动画作用于层,换句话说,他动画直接做用于整个UIView,而不像UIView的动画,可以作用于UIView局部或本身.当UIView作用与本身时,实际上也就相当于是对层的动画了.
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setDuration:1.0f];
[animation setTimingFunction:UIViewAnimationCurveEaseInOut];
[animation setType: kCATransitionMoveIn];
[animation setSubtype: kCATransitionFromBottom];
[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
[[[self superview] layer] addAnimation:animation forKey:@"transitionViewAnimation"];
setDuration:和UIView中的动画效果一样,持续时间.
setTimingFunction:是动画的种类,和UIView一样,比如匀速动画,快速开始结束等.
setType:是指定动画的类型,他有:
- kCATransitionFade (淡入淡出来补给动画)
- kCATransitionMoveIn(从一个方向覆盖的方式来补给动画)
- kCATransitionPush(推送的方式来补给动画)
- kCATransitionReveal(一个试图展现出另外另外一个试图的方式)
当除了第一种方式外(淡入淡出),可以通过setSubType:来制定动画的方向(因为这些动画都是直接着用于层的,所以相当于只有试图间的切换过渡).动画方向有4个:
- kCATransitionFromRight
- kCATransitionFromLeft
- kCATransitionFromTop
- kCATransitionFromBottom