iOS设置导航条颜色为渐变效果

最近在项目开发中有这样一个需求,需要将导航条背景设置成渐变色效果,想必大家的第一个想法肯定是让UI同事出一张渐变的图片,然后设置navigationBar的背景图片:

[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"icon_nav_bar"]forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

我的第一想法也是这样的,让UI同事切了一套@2x、@3x的渐变色图片,结果实践后发现设置完后plus屏幕上图片未铺满,右侧留了一条,网上查阅后说是切图尺寸的问题,使得图片未铺满,后面留的一块实际上是一张图片接着一张图片平铺的效果造成,最后未发现切图尺寸有什么问题,所以只好换了一种思路解决,在此也希望有发现这种解决方案问题出在哪里的小伙伴指导一下。

现在着重说一下另一个解决方案的思路,略显麻烦:

1、先创建一张渐变色UIView:
UIView *backView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, 64)];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = @[(__bridge id)KCOLOR_base_blue.CGColor, (__bridge id)KRGBHEXCOLOR(0x42A2F5).CGColor, (__bridge id)KRGBHEXCOLOR(0x43BDF5).CGColor];
gradientLayer.locations = @[@0.3, @0.5, @1.0];
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1.0, 0);
gradientLayer.frame = backView.frame;
[backView.layer addSublayer:gradientLayer];
2、将创建的渐变色UIView转换成Image
-(UIImage*)convertViewToImage:(UIView*)v{
  CGSize s = v.bounds.size;
  // 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需  要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了
  UIGraphicsBeginImageContextWithOptions(s, YES, [UIScreen mainScreen].scale);
  [v.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return image;
}
3、将转换成的Image赋给navigationBar的背景图
 [self.navigationBar setBackgroundImage:[self convertViewToImage:backView] forBarMetrics:UIBarMetricsDefault];

你可能感兴趣的:(iOS设置导航条颜色为渐变效果)