Search code examples
iphonecurluiviewtransitioncgaffinetransform

iPhone Curl Left and Curl Right transitions


I am looking for a way to do a UIViewAnimationTransitionCurlUp or UIViewAnimationTransitionCurlDown transition on the iPhone but instead of top to bottom, do it from the left to right (or top/bottom in landscape mode). I've seen this asked aroud the internet a few times but none sems to get an answer. However I feel this is doable.

I have tried changing the View's transform and the view.layer's transform but that didn't affect the transition. Since the transition changes when the device changes orientation I presume there is a way to fool the device to use the landscape transition in portrait mode and vice versa?


Solution

  • I actually managed to achieve this effect by changing the orientation of my UIViewController. The strange thing is, I had my controller nesten in another one when it wasn't working, but when I set him as the immediate view controller, it worked.

    Code that does it:

    In a UIViewController that is the main view controller in my app delegate and only allows landscape orientation (as you see in the 2nd method below) I have the following:

    -(void)goToPage:(int)page flipUp:(BOOL)flipUp {
    
         //do stuff...
    
         // start the animated transition
         [UIView beginAnimations:@"page transition" context:nil];
         [UIView setAnimationDuration:1.0];
         [UIView setAnimationTransition:flipUp ? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
    
         //insert your new subview
         //[self.view insertSubview:currentPage.view atIndex:self.view.subviews.count];
    
          // commit the transition animation
          [UIView commitAnimations];
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
         return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }