<UI>实现动画的若干种方式
来源:互联网 发布:gfa交易算法gfajiaoyi 编辑:程序博客网 时间:2024/05/09 01:32
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];}
0 0
- <UI>实现动画的若干种方式
- php抓取网页的若干实现方式
- .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
- .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
- Ui 实现多线程的四种方式
- ios 实现动画的几种方式
- IOS几种实现动画的方式
- 属性动画的几种实现方式
- UI 动画之UIView动画的 四种 使用含有block的类方法 实现动画
- 【前端动画】实现动画的6种方式
- C++生成随机数的若干种方式
- iOS开发 UI实现的三种动画
- 转: Redis消息队列的若干实现方式
- WPF的动画实现方式
- IOS的动画实现方式
- 有关网站UI实现的几种方式的讨论
- 有关网站UI实现的几种方式的讨论
- 整数集合的若干种实现
- 学习lua的点点滴滴(持续更新中)
- 深圳罗湖治萎缩性胃炎医院哪家好
- 深圳罗湖萎缩性胃炎医院最好
- 深圳罗湖慢性胃炎医院在线
- UVA 536 Tree Recovery(由前序中序求后序,经典)
- <UI>实现动画的若干种方式
- how to dual-boot win8 and ubuntu14.04 with UEFI booting 双系统安装
- Direct3D-顶点缓存
- HTML——左右侧边栏布局
- android用户界面之GridView教程实例汇总
- 机器学习相关——文本分类综述
- Qt学习笔记
- DM8168 开机自动运行程序
- 2014年11月1日-11月14日,共21小时,剩4/411小时