首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

UIVew切换卡通效果

2012-09-29 
UIVew切换动画效果UIKIT.frame中的动画时针对UIVew 实现的,而 QuartzCode中的动画时针对 layer 实现的- (I

UIVew切换动画效果
UIKIT.frame  中的动画时针对UIVew 实现的,而 QuartzCode中的动画时针对 layer 实现的

- (IBAction)switchViews:(id)sender
{
    /*
    //检查yellowViewController.view 的超视图是否为nil 从而检查使用了哪个视图
    //如果 yellowViewController.view 存在,但是并没有向用户显示 那么 self.yellowViewController.view.superview == nil 返回YES
    //如果 yellowViewController 不存在,或者yellowViewController已经从内存中擦除,self.yellowViewController.view.superview == nil 同样会返回 YES
    if (self.yellowViewController.view.superview == nil) {
        if (self.yellowViewController == nil) {
            YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
            self.yellowViewController = yellowController;
            [yellowController release];
        }
       
        [blueViewController.view removeFromSuperview];
        [self.view insertSubview:yellowViewController.view atIndex:0];
    } else {
        if (self.blueViewController == nil) {
            BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
            self.blueViewController = blueController;
            [blueController release];
        }
       
        [yellowViewController.view removeFromSuperview];
        [self.view insertSubview:blueViewController.view atIndex:0];
    }
     */
   
    /* 增加转换动画
   
    //声明动画块,并指定时间
    [UIView beginAnimations:@"view Flip" context:nil];//beginAnimations:context: 第一个参数接收动化块名称 第二个参数是一个(void *) 支持指定你希望将其指针于此动画块关联的对象
    [UIView setAnimationDuration:1.25];//设置动画曲线,决定了动画的时间
    //设置动画改变其速度,中间速度快,开始和结束速度慢
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
   
    if (self.yellowViewController.view.superview == nil) {
        if (self.yellowViewController == nil) {
            YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
            self.yellowViewController = yellowController;
            [yellowController release];
        }
       
        //选择翻转效果 缓存cache选项在动画开始时创建快照,并在动画的每个步骤使用这个图像,而不必重新绘制,除非视图在变换过程中需要改变
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
       
        [blueViewController viewWillAppear:YES];//即将显示
        [yellowViewController viewWillDisappear:YES];//即将不显示
       
        [blueViewController.view removeFromSuperview];
        [self.view insertSubview:yellowViewController.view atIndex:0];
       
        [yellowViewController viewDidAppear:YES];//已经显示
        [blueViewController viewDidDisappear:YES];//已经不显示
    } else {
        if (self.blueViewController == nil) {
            BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
            self.blueViewController = blueController;
            [blueController release];
        }
       
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
       
        [yellowViewController viewWillAppear:YES];
        [blueViewController viewWillDisappear:YES];
       
        [yellowViewController.view removeFromSuperview];
        [self.view insertSubview:blueViewController.view atIndex:0];
       
        [blueViewController viewDidAppear:YES];
        [yellowViewController viewDidDisappear:YES];
    }
    //启动动画块
    [UIView commitAnimations];
   
    */
   
    //准备动画
    CATransition *animation = [CATransition animation];
    //动画持续时间
    [animation setDuration:1.25f];
    //动画速度
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
   
    if (self.yellowViewController.view.superview == nil) {
        if (self.yellowViewController == nil) {
            YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
            self.yellowViewController = yellowController;
            [yellowController release];
        }
       
        //动画效果
        //kCATransitionFade淡出
        //kCATransitionMoveIn覆盖原图
        //kCATransitionPush推出
        //kCATransitionReveal底部显出来
        [animation setType:kCATransitionFade];
       
        //动画方向
        //kCATransitionFromRight/ kCATransitionFromLeft(默认值)
        //kCATransitionFromTop/kCATransitionFromBottom
        [animation setSubtype:kCATransitionFromBottom];
       
        [self.view.layer addAnimation:animation forKey:@"Reveal"];
      
        [blueViewController.view removeFromSuperview];
        [self.view insertSubview:yellowViewController.view atIndex:0];
    } else {
        if (self.blueViewController == nil) {
            BlueViewController *blueController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
            self.blueViewController = blueController;
            [blueController release];
        }
       
        //动画效果
        //suckEffect三角
        //rippleEffect水波
        //pageCurl上翻页
        //pageUnCurl下翻页
        //oglFlip上下翻转
        [animation setType:@"rippleEffect"];
       
        //动画方向
        //kCATransitionFromRight/ kCATransitionFromLeft(默认值)
        //kCATransitionFromTop/kCATransitionFromBottom
        //[animation setSubtype:kCATransitionFromBottom];
       
        [self.view.layer addAnimation:animation forKey:@"suckEffect"];//开始动画
       
        [yellowViewController.view removeFromSuperview];
        [self.view insertSubview:blueViewController.view atIndex:0];
    }

}

热点排行