您的位置:首页 > 产品设计 > UI/UE

<UI>实现动画的若干种方式

2014-11-01 14:04 781 查看



  IOS中实现动画有3中方式:基于UIView的动画、基于Layer的动画和利用第三方包HMGL实现的动画。

  1.实现基于UIView的动画:图片淡入淡出动画的例子(改变Alpha值)



- (void) alphaOut:(id)sender {
// 准备动画
[UIView beginAnimations:nil context:NULL];
// 设置动画持续时间
[UIView setAnimationDuration:5.0f];
//要使视图 发生变化的相关代码
[imageView0 setAlpha:0.0f];
// 开始动画
[UIView commitAnimations];
// 这里打一条输出可以看出 程序在执行nslog的时候 动画还没有结束 所以动画是后台开一个线程自动执行
NSLog(@"begin animation");
}




  另外可用这种方式实现的例子还有:移入移出动画(移动frame,例子省略)

  利用coreGraphics包中的CGAffine实现图片旋转动画





- (void) rotate:(id)sender {
// 取得当前的旋转引子
CGAffineTransform t = [imageView0 transform];
// 在t旋转引子上在旋转PI/2角度
CGAffineTransform newT = CGAffineTransformRotate(t, M_PI/2.0f);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0f];
//设置代理和下面的两个函数是为了在动画执行过程(开始、进行、结束)中让controller执行其他方法,
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationWillStartSelector:@selector(animationWillStart:context:)];
//另外两个进行回调的函数
// 动画开始会调用[self start:]
// 动画停止会调用[self finish:];
[imageView0 setTransform:newT];
[UIView commitAnimations];
}
// 动画完成回调函数
- (void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
NSLog(@"animation finish:%@", finished);
}
//动画将开始回调函数
- (void) animationWillStart:(NSString *)animationID context:(void *)context {
NSLog(@"animation start");
}




  下面这个例子展示了UIView动画的形式控制

turnPageUp



- (void) turnPageUp:(id)sender {
// 上翻页
NSInteger imageViewIndex0 = [[parentView subviews] indexOfObject:imageView0];
// 取得imageView0在父亲parentView重的index
NSInteger imageViewIndex1 = [[parentView subviews] indexOfObject:imageView1];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3.0f];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:parentView cache:YES];
// UIViewAnimationTransitionCurlUp 上翻页
// parentView 表示对parentView进行翻页
// 换掉imageview0 和imageview1
[parentView exchangeSubviewAtIndex:imageViewIndex0 withSubviewAtIndex:imageViewIndex1];
[UIView commitAnimations];
}




  2.基于CALayer的动画实现





- (void)cube:(id)sender {
//需要导入的包
// <QuartzCore/QuartzCore.h>
// QuartzCore.framework
//定义一个转场动画
CATransition *animation = [CATransition animation];
[animation setDuration:2.0f];
//可用类型
//kCATransitionFade 交叉 淡化过渡
//kCATransitionMoveIn 新视图移到旧视图上边
//kCATransitionPush新视图推出旧视图
//kCATransitionReveal旧视图移除
//其它 @"cube",@"pageCurl",@"pageUnCurl",@"rippleEffect",@"suckEffect",@"oglFlip"
//设置类型为cube
[animation setType:@"cube"];
//设置动画子类型,图片从哪儿开始切换,底部
[animation setSubtype:kCATransitionFromBottom];
//交换parentView两个子视图
[parentView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//为parentView的layer添加设置好的动画,key是此动画的关键字
[parentView.layer addAnimation:animation forKey:@"test"];
}




  3.利用第三方包实现HMGL动画





- (void)htmlClicked:(UIButton *)sender {
// 使用HMGL做3D变换
// 需要导入的包:OpenGLES.framework、QuartzCore.framework

// 初始化了一个具体door动作,实现的动画是Cloth转场动作
ClothTransition *door = [[ClothTransition alloc] init];
//单例模式的一个例子,新建一个HMGL转场的管理器
HMGLTransitionManager *manager = [HMGLTransitionManager sharedTransitionManager];
// 设置使用哪个动画专场,添加到manager对象中
[manager setTransition:door];
[door release];
// 对parentView进行动画
[manager beginTransition:parentView];
[parentView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
[manager commitTransition];
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐