在导航控制器上按下时视图变暗
我通过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时,您会在转换发生时看到阴影。
有几个可能的解决方案:
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