<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
原创粉丝点击