2015-06-06 99 views
0

我有此故事板:推SEGUE自定義動畫(導航控制器)

TabBarController:TAB1> NavigationController> VC1> VC2> VC3

// VC1.m 
[self performSegueWithIdentifier:@"VC2" sender:self]; 

// VC2.m 
[self performSegueWithIdentifier:@"VC3" sender:self]; 

我想VC1和VC2之間的過渡是一個淡入淡出動畫,但VC2和VC3之間的轉換是默認的動畫。

但我必須做推塞格,而不是模態,以保持UINavigationController的好處(除非我失去了一些東西)。我找到的所有解決方案都使用presentViewController

回答

1

嘗試,如果你堅持一個賽格瑞比我看到兩種方式使用此CATransition

CATransition *transition = [CATransition animation]; 
transition.duration = 0.3; 
transition.type = kCATransitionFade; 

[navigationController.view.layer addAnimation:transition forKey:kCATransition]; 
isPush ? [navigationController pushViewController:viewController animated:NO] : [navigationController popViewControllerAnimated:NO]; 
+1

非常感謝! – kursus

0

1)使用UIViewControllerAnimatedTransitioning協議和自定義的轉換ü喜歡的方式。

2)編寫自定義UIStoryboardSegue

或執行您通過控制器的操縱手段,他們的觀點和框架擁有過渡和動畫水木清華這樣的:

- (void)transitionToChildViewController:(UIViewController *)toViewController { 

UIViewController *fromViewController = ([self.childViewControllers count] > 0 ? self.childViewControllers[0] : nil); 
if (toViewController == fromViewController || ![self isViewLoaded]) { 
    return; 
} 

UIView *toView = toViewController.view; 
[toView setTranslatesAutoresizingMaskIntoConstraints:YES]; 
toView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
toView.frame = self.privateContainerView.bounds; 

[fromViewController willMoveToParentViewController:nil]; 
[self addChildViewController:toViewController]; 
[self.privateContainerView addSubview:toView]; 
[fromViewController.view removeFromSuperview]; 
[fromViewController removeFromParentViewController]; 
[toViewController didMoveToParentViewController:self]; 

}

的最後一個方法也許是最乏味的。