iOS 7在导航的自定义动画中显示黑色背景

Abd*_*mer 6 cocoa-touch objective-c ios ios7

我在我的iOS应用程序中使用自定义动画进行导航.

我有一个子类,UINavigationController其中重写了以下方法:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    CATransition* transition = [CATransition animation];
    transition.duration = 0.4;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
    transition.type = kCATransitionPush;//kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
    [self.view.layer addAnimation:transition forKey:@"Push"];

    [super pushViewController:viewController animated:NO];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    CATransition* transition = [CATransition animation];
    transition.duration = 0.4;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
    transition.type = kCATransitionPush;//kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromRight; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
    [self.view.layer addAnimation:transition forKey:@"Pop"];

    UIViewController *poppedVC = [super popViewControllerAnimated:NO];

    return poppedVC;
}
Run Code Online (Sandbox Code Playgroud)

我不记得链接,但我从这里的一个问题复制了这个代码,一点点修改对我有用.

现在,当我将代码移植到iOS 7 SDK时,导航时会显示黑色背景.

我在这里发布了一个视频:在iOS应用程序中导航时的黑色背景,以使其清晰.

注意:我的应用程序中的要求是当推/弹时动画与默认的左右和左右相反.当我针对iOS 5并且没有显示黑色背景/屏幕时,此代码工作正常.

Lil*_*ilo 5

在委托中添加(didFinishLaunchingWithOptions方法)这两行:

self.window.backgroundColor = [UIColor whiteColor];
self.window.tintColor = [UIColor whiteColor];
Run Code Online (Sandbox Code Playgroud)


Abd*_*mer 3

好吧,因为我找不到解决这个问题的可行方法。我做了一些工作来解决这个问题,现在动画看起来比以前好多了。

我将条形色调颜色和背景颜色设置为UINavigationBar相同。

UIColor *navigationBarColor = UIColorFromHexRGB(0x0473C0);    
[[UINavigationBar appearance] setBarTintColor:navigationBarColor];
[[UINavigationBar appearance] setBackgroundColor:navigationBarColor];
Run Code Online (Sandbox Code Playgroud)

导航期间,顶部状态栏位置显示黑色空间。

我这样做了:

UIView *hackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];
hackView.backgroundColor = navigationBarColor;
[self.window addSubview:hackView];
Run Code Online (Sandbox Code Playgroud)

请注意,此颜色与导航栏的颜色相同。

我有一个用于应用程序中所有视图的通用背景颜色。为了删除导航期间显示的黑色背景,我这样做了:

UIImage *backgroundImage = [UIImage imageNamed:@"viewbackground.png"];
UIColor *bgColor = [UIColor colorWithPatternImage:backgroundImage];

[self.window setBackgroundColor:bgColor];
[self.window setTintColor:bgColor];
Run Code Online (Sandbox Code Playgroud)

视频上传至此处