我正在添加渐变到导航栏'图层,它工作正常。 当我按下另一个视图控制器和弹出视图控制器时问题到了。父视图控制器具有右键栏按钮项,当我弹出视图控制器时,其颜色变暗。 我的代码是
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;
}
答案 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];
您可能还想为图层添加一些边框,因为边框似乎消失了。