Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

popViewControllerAnimated: custom transition animation?

Yes, I have looked for an answer already. None of the solutions work, except one that doesn't give the option for a fade transition, only flip or curl.

Like this:

methodname
    configure animation
    [self.navigationController popViewControllerAnimated:NO];

No matter what variety of transition animation config I try, nothing is visibly different from only using the typical single-line pop. If I change it to …Animated:YES];, I get the standard pop animation, maybe with something weird happening from the broken config.

So my question is this: How can I do a pop with, if not CrossDissolve, then at least something that looks the same? Is that even possible with a navigation controller?

Using modal views would have the default animation I want, and I could manage the view stack easily enough, but I don't want to do that.

like image 884
Thromordyn Avatar asked May 11 '12 14:05

Thromordyn


2 Answers

For this type of transition I would really recommend a modal view controller, thats the way the system was designed.

But if you insist on using the navigation controller there is a way, though somewhat ugly.

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

CATransition *transition = [CATransition animation];
[transition setType:kCATransitionFade];
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"];

[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];

The CATransaction will disable all standard animations. The CATransition adds a fade transition to the navigation controller layer when views are swapped (in this case removing the viewcontroller view that is popped).

like image 170
Joris Kluivers Avatar answered Sep 27 '22 15:09

Joris Kluivers


In iOS 7 above, you may want to look into UIViewControllerAnimatedTransitioning for presented view controllers, or UINavigationControllerDelegate method :

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC

I have some sample code from another question for more info.

like image 35
Jon Avatar answered Sep 27 '22 17:09

Jon