当推入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];
}];
}
谢谢,你可以为你解答迅速的版本?另外如何通过拍摄的图像? – user2232305
在目标C中的头文件中设置一个强大的UIImage属性。当您编写推视图控制器B的代码时,您必须编写 ViewControllerB.image = yourImage; 对不起,我不是很熟悉迅速,并可能最终误导你。我已经告诉过你如何做到客观C,你应该能够迅速做出想法并做到这一点。 – Rikh