使用transitionFromView和transitionWithView的过渡行为

Dav*_*vid 21 iphone views transitions uiview ios

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

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

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];  
 }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*k B 26

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

这是从文档中复制的:

[UIView transitionWithView:containerView
       duration:0.2
       options:UIViewAnimationOptionTransitionFlipFromLeft
       animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
       completion:NULL];
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 13

我遇到了同样的问题,我同意早先的答案.看来你必须有一个容器视图,用于动画从一个子视图到另一个子视图的转换.

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

我的代码看起来像:

    [UIView transitionFromView:view1
                        toView:view2
                      duration:0.5
                       options:UIViewAnimationOptionTransitionFlipFromRight |
                               UIViewAnimationOptionAllowUserInteraction    |
                               UIViewAnimationOptionBeginFromCurrentState
                    completion:nil];
Run Code Online (Sandbox Code Playgroud)


Rui*_*nes 7

这是我的工作解决方案存根,一个简单的事情花了2个小时,该死的:我们有一个按钮来翻转东西,一个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;
     }];
}
Run Code Online (Sandbox Code Playgroud)


Hal*_*Hal 5

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

因此,如果view1是您开始的子视图,并且您想要翻转到view2然后添加

UIView *containerView = [[UIView alloc] initWithFrame:appropriateSize];
[containerView addSubview:view1];
Run Code Online (Sandbox Code Playgroud)

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

[UIView transitionFromView:view1 
                    toView:view2 
                  duration:2.0   
                   options:UIViewAnimationOptionTransitionFlipFromLeft   
                completion:nil];   
Run Code Online (Sandbox Code Playgroud)