【问题标题】:Transition behavior using transitionFromView and transitionWithView使用 transitionFromView 和 transitionWithView 的过渡行为
【发布时间】:2011-04-05 20:53:41
【问题描述】:

我正在尝试在两个子视图(view1 和 view2)之间创建过渡。当按下按钮时,我希望 view1(前)翻转并显示 view2(后)。我已经尝试过transitionFromView 和transitionWithView。每个都有效-但每个都有问题。

transitionFromView - 翻转父视图(翻转整个窗口视图,而不是子视图)。当这种翻转发生时——一个子视图在翻转之前位于父视图的前面,而另一个子视图在翻转的后面——应该是这样。但我不希望超级视图翻转,只是子视图。

transitionWithView - 仅翻转子视图 - 但在转换发生之前会显示“to”视图。

有人有建议吗?

-(IBAction) button1action:(id) sender {  

 if ([sender tag] == 0) {  

  [UIView transitionFromView:view2 toView:view1 duration:2.0   
  options:UIViewAnimationOptionTransitionFlipFromLeft   
  completion:nil];   
}  

 else {  
  [view1 removeFromSuperview];    
  [self.view addSubview:view2];  
  [UIView transitionWithView:view2   
    duration:2.0  
    options:UIViewAnimationOptionTransitionFlipFromRight +  
    UIViewAnimationOptionShowHideTransitionViews  
      animations:^{}   
     completion:nil];  
 }
}

【问题讨论】:

  • 请在下面标记一个问题作为答案,或者输入您自己的答案来解决您的问题以帮助社区。​​span>
  • 他为什么要把一个问题标记为答案? :D

标签: iphone uiview views ios transitions


【解决方案1】:

遇到同样的问题,我同意 Eric 和 Sam 的观点: 只要您创建一个您希望翻转的适当大小的容器视图,transitionWithView 或 transitionFromView 都将执行您想要的操作。否则整个窗口视图会翻转。

所以如果 view1 是你开始的子视图并且你想翻转到 view2 然后添加

UIView *containerView = [[UIView alloc] initWithFrame:appropriateSize];
[containerView addSubview:view1];

然后最简单的动画方法可能是:

[UIView transitionFromView:view1 
                    toView:view2 
                  duration:2.0   
                   options:UIViewAnimationOptionTransitionFlipFromLeft   
                completion:nil];   

【讨论】:

    【解决方案2】:

    使用transitionFromView,前视图和后视图都应该在另一个视图中(不是超级视图)。这样它就不会翻转整个屏幕。

    > superview
    >     another view
    >        backview
    >        frontview
    

    UIView.transitionFromView(frontView, toView: backView, duration: 0.5, options: .TransitionFlipFromLeft | .ShowHideTransitionViews) { 完成于

    }

    你可能想让(另一个视图)等于 frontView 的大小

    【讨论】:

      【解决方案3】:

      请记住,容器视图需要纯色背景色。这意味着除了清晰的颜色之外的任何其他内容。这是我的错误,花了很长时间才弄明白。

      【讨论】:

        【解决方案4】:

        这是我的工作解决方案存根,一个简单的事情,花了 2 个小时,该死的: 我们有 1 个按钮来翻转事物,一个名为 UIView 的面板,其中包含我想用翻转动画交换的 2 个视图。

        -(void)viewDidLoad{
            [super viewDidLoad];
            UIButton *btnFlip = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            btnFlip.frame = CGRectMake(10, 10, 50, 30);
            [btnFlip setTitle:@"flip" forState:UIControlStateNormal];
            [btnFlip addTarget:self action:@selector(flip) forControlEvents:UIControlEventTouchUpInside];
            [self.view addSubview:btnFlip];
        
            panel = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 300,300)];
            panel.backgroundColor = [UIColor darkGrayColor];
            [self.view addSubview:panel];
        
            panelBack = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 280, 200)];
            panelBack.tag = 1;
            panelBack.backgroundColor = [UIColor brownColor];
            [panel addSubview:panelBack];
        
            panelFront = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 280, 200)];
            panelFront.tag = 2;
            panelFront.backgroundColor = [UIColor whiteColor];
            [panel addSubview:panelFront];
        
            displayingFront = TRUE;
        }
        
        -(void)flip{
        
            [UIView transitionWithView:panel 
            duration:0.5
            options:(displayingFront ? UIViewAnimationOptionTransitionFlipFromRight : UIViewAnimationOptionTransitionFlipFromLeft)
            animations:^{ 
                if (displayingFront) {
                    //panelFront.hidden=TRUE;
                    //panelBack.hidden = FALSE;
                    [panelFront removeFromSuperview];
                    [panel addSubview:panelBack];
                }else{
                    //panelFront.hidden=FALSE;
                    //panelBack.hidden = TRUE;
                    [panelBack removeFromSuperview];
                    [panel addSubview:panelFront];
                }
             }
             completion:^(BOOL finished){
                 displayingFront = !displayingFront;
             }];
        }
        

        【讨论】:

          【解决方案5】:

          我有同样的要求,并且看到了许多方法——从使用层(如果您只想处理 UIView,最终会非常复杂)到建议我需要一个“容器”然后在子之间转换意见。但如果你只是想从前到后切换一些东西,比如翻转扑克牌或游戏牌,我做了一行更改:

          (注意:我在网格中有一个 UIViews (tiles[x][y]) 数组(用于游戏)。我的所有图像文件名都在数据库表/数组中,它们会动态加载到UIImageViews。名为“tileBackPicImageNM”的 UIImage 中卡片或磁贴“背面”的图像。

          所以我的代码只是将正面图像换成背面图像:

          [tiles[indexX][indexY] setImage:[UIImage imageNamed:tileBackPicImageNM]];
          

          效果很好。

          但是现在,要显示一个翻转动作,它是:

          [UIView transitionWithView:tiles[indexX][indexY] duration:0.3 options:UIViewAnimationOptionTransitionFlipFromLeft 
                              animations:^{  
                                  [[indexX][indexY] setImage:[UIImage imageNamed:tileBackPicImageNM]];
                              }
                              completion:NULL];    
          

          我尝试了不同的“持续时间”参数——随后将其设为我在 viewDidLoad 例程中设置的浮点数。快于0.3几乎看不到,1或2的值很慢……

          这不涉及两个子视图,这对我来说更有用,因为我不希望有一个包含视图层次结构的容器数组等......并且在新级别等上我总是无论如何都要重新加载数组...

          【讨论】:

            【解决方案6】:

            我遇到了同样的问题,我同意之前的回答。看来你必须有一个容器视图来动画从一个子视图到另一个子视图的过渡。

            我正在使用 transitionFromView 方法。要在动画后面添加背景,您还需要一个带有容器视图背景的超级视图。

            我的代码如下:

                [UIView transitionFromView:view1
                                    toView:view2
                                  duration:0.5
                                   options:UIViewAnimationOptionTransitionFlipFromRight |
                                           UIViewAnimationOptionAllowUserInteraction    |
                                           UIViewAnimationOptionBeginFromCurrentState
                                completion:nil];
            

            【讨论】:

              【解决方案7】:

              您需要在动画块中删除和添加子视图。另外,我认为 transitionWithView 应该将超级视图作为参数。我认为您需要做的是使用与您要翻转的视图大小相同的容器视图。

              这是从文档中复制的:

              [UIView transitionWithView:containerView
                     duration:0.2
                     options:UIViewAnimationOptionTransitionFlipFromLeft
                     animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
                     completion:NULL];
              

              【讨论】:

              • 容器视图是关键。这是在 ios6 和 ios7 上测试和工作
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-03-11
              • 1970-01-01
              • 2013-09-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多