Transition behavior using transitionFromView and transitionWithView

后端 未结 7 562
既然无缘
既然无缘 2020-12-05 07:27

I am attempting to create a transition between two subviews (view1 and view2). When a button is pressed I want view1 (front) to flip and show view2 (back). I have tried both

相关标签:
7条回答
  • 2020-12-05 08:03

    Having run into the same problem I agree with Eric and Sam: either transitionWithView or transitionFromView will both do what you want as given above as long as you create a container view of the appropriate size that you wish to flip. Otherwise the whole window view will flip.

    So if view1 is the subview you begin with and you want to flip to view2 then add

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

    And then the simplest way to animate is probably:

    [UIView transitionFromView:view1 
                        toView:view2 
                      duration:2.0   
                       options:UIViewAnimationOptionTransitionFlipFromLeft   
                    completion:nil];   
    
    0 讨论(0)
  • 2020-12-05 08:04

    I have run into this exact same problem, and I agree with the earlier answer. It seems you must have a container view for animating a transition from one subview to another subview.

    I'm using the transitionFromView approach. To have a background behind the animation, you will also need a superview with the background for the container view.

    My code looks like:

        [UIView transitionFromView:view1
                            toView:view2
                          duration:0.5
                           options:UIViewAnimationOptionTransitionFlipFromRight |
                                   UIViewAnimationOptionAllowUserInteraction    |
                                   UIViewAnimationOptionBeginFromCurrentState
                        completion:nil];
    
    0 讨论(0)
  • 2020-12-05 08:07

    Here's my working solution stub, a simple thing that took 2 hours, damn: we got 1 button to flip things, a UIView called panel that holds the 2 views I want to swap with a flip animation.

    -(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;
         }];
    }
    
    0 讨论(0)
  • 2020-12-05 08:08

    Keep in mind that the container view requires a solid background color.It means anything else than clear color.This was my mistake and spent quite long time to figure it out.

    0 讨论(0)
  • 2020-12-05 08:10

    You need to remove and add the subviews in the animation block. Also, I think that transitionWithView is supposed to take the super view as argument. I think what you need to do to get this right is to use a container view that is the same size as the views you want to flip.

    This is copied from the documentation:

    [UIView transitionWithView:containerView
           duration:0.2
           options:UIViewAnimationOptionTransitionFlipFromLeft
           animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
           completion:NULL];
    
    0 讨论(0)
  • 2020-12-05 08:12

    using transitionFromView, both front and back view should be inside another view(not the super view). this way it will not flip the whole screen.

    > superview
    >     another view
    >        backview
    >        frontview
    

    UIView.transitionFromView(frontView, toView: backView, duration: 0.5, options: .TransitionFlipFromLeft | .ShowHideTransitionViews) { finished in

    }

    You might want to make the (another view) equal to the size of the frontView

    0 讨论(0)
提交回复
热议问题