在导航控制器上按下时视图变暗

我通过segues在NavigationController上推送ViewControllers。 我有我自己的Subclassed NavigationController,它在索引0处插入了UIImageView - 这是我整个应用程序的背景。

问题是,我可以看到,当新的视图控制器从右侧进入屏幕时,开始时就像是在调用viewDidApear之后有一些浅黑色覆盖层正在消失。

每个视图控制器都有一个self.view.backgroundColor = [UIColor clearColor] 。 如果我改变它,一切都很好。 也许我应该以另一种方式设置应用程序的背景? 如果不是,如何避免这种黑暗效应?

在这里你可以看到这个效果:http://tinypic.com/r/34j9ffs/8


这是因为iOS 7中的标准UINavigationController推动动画。当一个新的VC被推入堆栈时,它将自身覆盖在先前的VC之上,并在其下方有一个微小的阴影。 因此,当您推送具有清晰背景的viewController时,您会在转换发生时看到阴影。

有几个可能的解决方案:

  • 在你的viewControllers上设置一个背景颜色(因为你的全局背景图像,可能不是你的选择)。 最简单的解决方案,但需要更改您的设计。
  • 使用新的iOS 7 API实现您自己的转换。 在这里看到一个例子和Big Nerd Ranch的文章。 如果你想保留你的背景图片,这对你的问题来说确实是'正确'的解决方案。
  • 根据这个答案,添加一个UINavigationController类别来添加一个更简单的“复古”推动和弹出式动画。 这更多的是一个快速和骇人听闻的解决方案。

  • 我创建了一个应该完成这项工作的自定义推送流程:

    ClearBkgPushSegue.h:

    #import <UIKit/UIKit.h>
    
    @interface ClearBkgPushSegue : UIStoryboardSegue
    
    @end
    

    ClearBkgPushSegue.m:

    #import "ClearBkgPushSegue.h"
    
    @implementation ClearBkgPushSegue
    
    
    -(void)perform {
        UIViewController *sourceViewController = self.sourceViewController;
        UIViewController *destinationViewController = self.destinationViewController;
    
        CGRect bounds = [[UIScreen mainScreen] bounds];
        UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
    
        UIView *destView = destinationViewController.view;
        [window insertSubview:destinationViewController.view aboveSubview:sourceViewController.view];
    
        destView.frame = CGRectMake(bounds.size.width, destView.frame.origin.y, destView.frame.size.width, destView.frame.size.height);
        [UIView animateWithDuration:.35 delay:0 options:UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             destView.frame = sourceViewController.view.frame;
                             sourceViewController.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width * -0.33, 0.0, sourceViewController.view.frame.size.width, sourceViewController.view.frame.size.height);
                             sourceViewController.view.alpha = 0;
                         } completion:^(BOOL finished) {
                            [sourceViewController.navigationController pushViewController:destinationViewController animated:NO];
                             sourceViewController.view.alpha = 1;
    
        }];
    
    
    }
    
    @end
    

    只要选择你的继续是“自定义”,并选择这个类,你很好去。

    链接地址: http://www.djcxy.com/p/18781.html

    上一篇: Views getting darker when are pushed on navigation controller

    下一篇: How to detect a double