我正在通过segues在NavigationController上推送ViewControllers。我有自己的子类NavigationController,它在索引0处插入了UIImageView
- 它是我整个应用程序的背景。
问题在于我可以看到当新的视图控制器从右侧进入屏幕时,在开始时就像是在调用viewDidApear
之后会出现一些浅黑色覆盖。 / p>
每个视图控制器都有一个self.view.backgroundColor = [UIColor clearColor]
。
如果我改变它,一切都很好。
也许我应该以另一种方式设置应用背景?
如果没有,如何避免这种黑暗效应?
在这里你有这种效果的屏幕截图: http://tinypic.com/r/34j9ffs/8
答案 0 :(得分:3)
这是因为iOS 7中的标准UINavigationController
推送动画。当一个新的VC被推入堆栈时,它会覆盖在前一个VC的顶部,并在其下面留下一个小阴影。因此,当您推动具有清晰背景的viewControllers时,您会在转换发生时看到阴影。
有几种可能的解决方案:
UINavigationController
类别以添加更简单的“复古”推送动画,as per this answer。这是一个快速而又苛刻的解决方案。答案 1 :(得分:0)
我创建了一个应该完成这项工作的自定义推送segue:
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
只需选择你的segue为“自定义”并选择这个课程就可以了。