当推入UI导航时更改背景控制器

问题描述:

我在我的应用程序中有一个UInaviguationController。我的问题是如何在将viewController推送到当前场景的视图时制作backgroundView。默认是黑屏。我希望实现类似于在UINaviguationController中呈现Modally而不是当前上下文的东西。当推入UI导航时更改背景控制器

比方说,你是从视图控制器A到视图控制器B.

你可以尝试像服用右背景视图的屏幕截图您在使用导航控制器推B之前。

UIGraphicsBeginImageContextWithOptions(targetView.bounds.size, NO, 0); 
[targetView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

然后通过此图像查看控制器B并将其设置为背景图像。如果您还希望与以模态方式呈现视图控制器相同的动画,则必须使用自定义导航控制器动画并进行设置。

编辑:如果你想要做的一切都表明B上的相同的纯色为A的只需设置B的背景色是A和添加自定义导航控制器动画

对于动画, 您必须将View Controller设置为navigationController的委托。然后您将不得不添加以下代理功能:

-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC 
     { 
     return [[Slide alloc] init]; 
    } 

然后返回您要创建的类来实现动画。你将不得不让你做出一流符合<UIViewControllerAnimatedTransitioning>协议

的类必须实现以下两个代表职能 -

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{ 
     return 0.4f; 
} 

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext{ 
UIViewController* toController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
UIViewController* fromController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
UIView* container = [transitionContext containerView]; 
[container addSubview:toController.view]; 

[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ 
     //set frame to be out of screen bounds here 
    } completion:^(BOOL finished) { 
     [fromController.view removeFromSuperview]; 
     [transitionContext completeTransition:finished]; 
    }]; 
} 
+0

谢谢,你可以为你解答迅速的版本?另外如何通过拍摄的图像? – user2232305

+0

在目标C中的头文件中设置一个强大的UIImage属性。当您编写推视图控制器B的代码时,您必须编写 ViewControllerB.image = yourImage; 对不起,我不是很熟悉迅速,并可能最终误导你。我已经告诉过你如何做到客观C,你应该能够迅速做出想法并做到这一点。 – Rikh