IOS动画学习

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:是指定动画的类型,他有:

 

  1. kCATransitionFade (淡入淡出来补给动画)
  2. kCATransitionMoveIn(从一个方向覆盖的方式来补给动画)
  3. kCATransitionPush(推送的方式来补给动画)
  4. kCATransitionReveal(一个试图展现出另外另外一个试图的方式)
当除了第一种方式外(淡入淡出),可以通过setSubType:来制定动画的方向(因为这些动画都是直接着用于层的,所以相当于只有试图间的切换过渡).动画方向有4个:
  1. kCATransitionFromRight
  2. kCATransitionFromLeft
  3. kCATransitionFromTop
  4. kCATransitionFromBottom



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值