前段时间我们UI设计了一个左右颜色渐变的导航栏,样式还真是漂亮啊!我也很喜欢,可是的时候好看归好看,Xcode要报错一样不放过!哈哈哈!
下面就先说说我是怎么实现,首先提供一个UIColor的分类:
.h文件如下:
//
// UIImage+GradientColor.h
// advertisingCattle
//
// Created by 小蜜蜂 on 2018/4/13.
// Copyright © 2018年 小蜜蜂. All rights reserved.
//
#import
typedefNS_ENUM(NSUInteger, GradientType) {
GradientTypeTopToBottom =0,//从上到小
GradientTypeLeftToRight =1,//从左到右
GradientTypeUpleftToLowright =2,//左上到右下
GradientTypeUprightToLowleft =3,//右上到左下
};
@interfaceUIImage (GradientColor)
+ (UIImage*)gradientColorImageFromColors:(NSArray*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize;
@end
.m文件如下
//
// UIImage+GradientColor.m
// advertisingCattle
//
// Created by 小蜜蜂 on 2018/4/13.
// Copyright © 2018年 小蜜蜂. All rights reserved.
//
#import "UIImage+GradientColor.h"
@implementationUIImage (GradientColor)
+ (UIImage*)gradientColorImageFromColors:(NSArray*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize {
NSMutableArray *ar = [NSMutableArray array];
for(UIColor*cincolors) {
[araddObject:(id)c.CGColor];
}
UIGraphicsBeginImageContextWithOptions(imgSize, YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);
CGGradientRefgradient =CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar,NULL);
CGPointstart;
CGPointend;
switch(gradientType) {
case GradientTypeTopToBottom:
start =CGPointMake(0.0,0.0);
end =CGPointMake(0.0, imgSize.height);
break;
case GradientTypeLeftToRight:
start =CGPointMake(0.0,0.0);
end =CGPointMake(imgSize.width,0.0);
break;
case GradientTypeUpleftToLowright:
start =CGPointMake(0.0,0.0);
end =CGPointMake(imgSize.width, imgSize.height);
break;
case GradientTypeUprightToLowleft:
start =CGPointMake(imgSize.width,0.0);
end =CGPointMake(0.0, imgSize.height);
break;
default:
break;
}
CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGContextRestoreGState(context);
CGColorSpaceRelease(colorSpace);
UIGraphicsEndImageContext();
returnimage;
}
@end
以上就是完整的UIColor分类了,到目前为止还不知道怎么在简书上面插入代码,有知道的朋友告知一下,谢谢!
那下面就说说我是怎么使用这个的:
注意上面注释了一行代码和注释那行代码上面的代码!!!
这样子我就实现了颜色的渐变,而使用下面被注释掉的那行代码,即使用[_headview setBackgroundColor:[UIColor colorWithPatternImage:bgImg]];进行设置的时候,进行真机调试一点击输入框就闪退了,因为我手机上装的是搜狗输入法,个人不喜欢使用苹果原生的输入法,所以我就装了搜狗输入法,下面就是报错截图:
就是说使用colorWithPatternImage方法产生的报错,那么既然是使用这个方法产生的报错,那当然就不能再使用这个方法了,要么就不要使用第三方输入法,可是我自己宁愿不使用colorWithPatternImage方法,也要使用第三方输入法,哈哈哈!其实使用colorWithPatternImage方法还会造成消耗内存大的现象,所以换方法成了必然。但是我又面临一个怎么设置背景颜色的渐变色问题了,那么网上的方法固然也很多,但是都没有很好解决我最关注的问题,所以我就只能另辟蹊径了,那么上面叫大家注意的代码就是完美实现了渐变色和设置背景颜色的问题,而且还不会出现使用第三方输入法出现APP闪退的问题。
欢迎大家联系一起进步,QQ:834537795.