ナビゲーション コントローラーのプッシュとポップの遷移をカスタマイズしようとしています。基本的にアルファアニメーションが起こっています。これがコードです。プレゼンテーションの後に iPad を回転させ、プレゼンテーション中の viewController を閉じると、containView がそこにとどまるまで、非常にクールに動作します。[transitionContext containerView] がデバイスと共に回転することはなく、表示中のビューコントローラーを閉じた後に表示されるようになります。
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
self.transitionContext = transitionContext;
if(self.isReverse) {
[self hide:transitionContext];
} else {
[self show:transitionContext];
}
}
#pragma mark - Helper Method
- (void)show:(id<UIViewControllerContextTransitioning>)transitionContext {
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];;
toViewController.view.frame = fromViewController.view.frame;
[[transitionContext containerView] addSubview:toViewController.view];
[transitionContext containerView].backgroundColor = [UIColor redColor];
toViewController.view.alpha = 0.0;
[UIView animateWithDuration:[self transitionDuration:transitionContext]
delay:0.0
options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveEaseInOut
animations:^{
toViewController.view.alpha = 1.0;
}
completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
- (void)hide:(id<UIViewControllerContextTransitioning>)transitionContext {
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContext containerView] insertSubview:toViewController.view belowSubview:fromViewController.view];
fromViewController.view.alpha = 1.0;
[UIView animateWithDuration:[self transitionDuration:transitionContext]
delay:0.0
options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveEaseInOut
animations:^{
fromViewController.view.alpha = 0.0;
} completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}