iOS设置导航栏背景颜色为渐变色
2018-05-03 本文已影响0人
要成为灰太狼的男人
在项目开发中有时候会遇到需要设置导航栏为渐变色的要求,第一个反应是设置navigationBar的BackgroundImage背景图片:
[self.navigationBar setBackgroundImage:[UIImageimageNamed:@"icon_nav_bar_back"]forBarPosition:UIBarPositionAnybarMetrics:UIBarMetricsDefault];
但是这样做之后发现在手机上会出现图片不对的情况,要不就是铺不满,要不就是只占用了图片的一半左右的大小。后来通过查阅和咨询觉得可以换一种思路:自己绘制一张同等大小的渐变色图片:
1、先创建一张渐变色UIView:
UIView*backView = [[UIViewalloc]initWithFrame:CGRectMake(0,0, kScreenWidth,64)];CAGradientLayer*gradientLayer = [CAGradientLayerlayer];gradientLayer.colors = @[(__bridgeid)KCOLOR_base_blue.CGColor, (__bridgeid)KRGBHEXCOLOR(0x42A2F5).CGColor, (__bridgeid)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{CGSizes = v.bounds.size;// 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需 要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了UIGraphicsBeginImageContextWithOptions(s,YES, [UIScreenmainScreen].scale); [v.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();returnimage;}
3、将转换成的Image赋给navigationBar的背景图
[self.navigationBar setBackgroundImage:[selfconvertViewToImage:backView] forBarMetrics:UIBarMetricsDefault];
此方法是参考小伙伴的原文链接在这里:iOS设置导航条颜色为渐变效果 - 简书