tags:

views:

7807

answers:

2
+2  Q: 

Flip View Iphone

Dear All, please consider the code below, and tell me what I'm doing wrong.

I want to flip between two UIViews.

Somehow, when I flip away from the initial view, I just get the flipped view, without animation. When I flip back, the animation shows just fine.

The flips are triggered from buttons on the views themselves.

- (IBAction)showMoreInfo:(id)sender
{
    UIView *moreInfo = self.flipView;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];

    UIView *parent = self.view.superview;
    [self.view removeFromSuperview];

    [parent addSubview:moreInfo];

    [UIView commitAnimations];

}



- (IBAction)showLessInfo:(id)sender
{
    UIView *lessInfo = self.view;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.flipView cache:YES];

    UIView *parent = self.flipView.superview;
    [self.flipView removeFromSuperview];

    [parent addSubview:lessInfo];

    [UIView commitAnimations];

}
+3  A: 

It's probably because you aren't using a container view as the transition view. Refer to the documentation on setAnimationTransition:forView:cache:

If you want to change the appearance of a view during a transition—for example, flip from one view to another—then use a container view, an instance of UIView, as follows:

  1. Begin an animation block.
  2. Set the transition on the container view.
  3. Remove the subview from the container view.
  4. Add the new subview to the container view.
  5. Commit the animation block.

Try using self.view.superview in the animation transition view of the showMoreInfo:

The reason the showLessInfo: method works is you are using a container view.

Jason Harwig
Dear Jason, when I do the self.view.superview, it flips fine in showMoreInfo:, but flipping back (using showLessInfo:) now misbehaves: it just shows the initial view without animation. Putting self.view.superview in this method doesn't help. I'm sure that I'm just very stupid, but just give me one more line of code, and I would be very grateful.
Sorry for being stupid. I put in self.flipView.superview and everything is fine now!
+2  A: 

Can you use your MainWindow (UIWindow) as the container view as UIWindow inherence from UIView?

Also iPhone 3.0 introduced the flip transaction via the presentModalViewController method:

CustomViewController *vc = [[CustomViewController alloc]
    initWithNibName:@"CustomViewController" bundle:nil];

vc.delegate = self;

// The magic statement. This will flip from right to left.
// present the modal view controller then when you dismissModalViewController
// it will transition flip from left to right. Simple and elegant.
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController:vc animated:YES];

[vc release];
Sukima
to remove the view controller with this method use: dismissModalViewControllerAnimated
Alex