使用UINavigationController从右向左推送ViewController

lud*_*udo 36 iphone objective-c uinavigationcontroller

众所周知UINavigationController从左到右推送ViewController,有没有办法将视图从右推到左?喜欢后退按钮的动画.
现在我有这个:


[self.navigationController pushViewController:viewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

Fel*_*oux 52

您可以NSMutableArray从navigationController的数组中创建一个viewcontrollers并在当前之前插入新的viewController.然后设置viewControllers数组没有动画并弹回.

UIViewController *newVC = ...;
NSMutableArray *vcs =  [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[vcs insertObject:newVC atIndex:[vcs count]-1];
[self.navigationController setViewControllers:vcs animated:NO];
[self.navigationController popViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

  • 我基于这个想法创建了一个UINavigationController的工作子类:http://bit.ly/iOS-rtl (2认同)
  • 好黑 使用CATransition应该是正确的方法。 (2认同)

小智 37

请试试这个

HomePageController  *pageView = [[HomePageController alloc] initWithNibName:@"HomePageController_iPhone" bundle:nil];

CATransition *transition = [CATransition animation];
transition.duration = 0.45;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
transition.delegate = self;
[self.navigationController.view.layer addAnimation:transition forKey:nil];

self.navigationController.navigationBarHidden = NO;
[self.navigationController pushViewController:pageView animated:NO];
Run Code Online (Sandbox Code Playgroud)


小智 9

Try this :  
//Push effect in reverse way
    CATransition* transition = [CATransition animation];
    transition.duration = 0.75;
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromLeft;
    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
    [self.navigationController pushViewController:vc animated:NO];
Run Code Online (Sandbox Code Playgroud)


You*_*shi 6

这段代码工作正常.请试试

CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionReveal;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:phoneServicesViewController animated:NO];
Run Code Online (Sandbox Code Playgroud)