NavigationBar图层渐变效果不佳

时间:2012-01-24 14:43:41

标签: iphone objective-c ios

我正在添加渐变到导航栏'图层,它工作正常。 当我按下另一个视图控制器和弹出视图控制器时问题到了。父视图控制器具有右键栏按钮项,当我弹出视图控制器时,其颜色变暗。 我的代码是

CGRect navFrame = self.navigationController.navigationBar.frame;
navFrame.origin.y = 0.0f;
[self.navigationController.navigationBar.layer insertSublayer:[AddGradient addGradientToNavigationBar:navFrame] atIndex:0];

addGradientToNavigationBar的代码是

+ (CAGradientLayer*)addGradientToNavigationBar:(CGRect)navRect {

    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = navRect;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0] CGColor],
                   (id)[[XAppDelegate getColor] CGColor], nil];

    return gradient;
}

1 个答案:

答案 0 :(得分:3)

我有同样的问题。 我正在尝试使用UIBarStyleBlackTranslucent样式将渐变图层添加到导航栏以获得玻璃效果。在搜索网络和大量实验后,我找不到适合该问题的解决方案。最后,我想出了以下解决方法:

    CAGradientLayer *yourGradient = ...

//需要两个额外的图层来模仿UIBarStyleBlackTranslucent风格

    CAGradientLayer *gradient = [CAGradientLayer layer];

    gradient.frame = CGRectMake(0, 0, 320, 44);


    NSMutableArray *cgColors = [[NSMutableArray alloc] init];

    [cgColors addObject:(id)[[UIColor colorWithRed:0.0
                                     green:0.0
                                      blue:0.0
                                     alpha:0.2] CGColor]];
    [cgColors addObject:(id)[[UIColor colorWithRed:0.0
                                     green:0.0
                                      blue:0.0
                                     alpha:0.6] CGColor]];
    [cgColors addObject:(id)[[UIColor colorWithRed:0.0
                                     green:0.0
                                      blue:0.0
                                     alpha:0.5] CGColor]];

    gradient.colors = cgColors;

    CALayer *layer = [CALayer layer];

    _layer.frame = CGRectMake(0, 22, 320, 22);

    _layer.backgroundColor =[[UIColor colorWithRed:0.0
                                             green:0.0
                                              blue:0.0
                                             alpha:0.2] CGColor];

//导航栏按钮需要这个

    [rootController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

//将图层添加到导航栏图层的第一个子图层

    [[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:yourGradient atIndex:0];

//添加渐变图层后,UIBarStyleBlackTranslucent样式效果消失

//来自栏(但不是来自按钮)

//因此需要以下内容来模仿它

    [[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:gradient atIndex:1];

    [[[rootController.navigationBar.layer sublayers] objectAtIndex:0] insertSublayer:layer atIndex:2];

您可能还想为图层添加一些边框,因为边框似乎消失了。