? ? 前段時間我們UI設(shè)計了一個左右顏色漸變的導(dǎo)航欄,樣式還真是漂亮啊!我也很喜歡,可是的時候好看歸好看,Xcode要報錯一樣不放過!哈哈哈!
下面就先說說我是怎么實現(xiàn),首先提供一個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分類了,到目前為止還不知道怎么在簡書上面插入代碼,有知道的朋友告知一下,謝謝!
那下面就說說我是怎么使用這個的:

注意上面注釋了一行代碼和注釋那行代碼上面的代碼?。?!
這樣子我就實現(xiàn)了顏色的漸變,而使用下面被注釋掉的那行代碼,即使用[_headview setBackgroundColor:[UIColor colorWithPatternImage:bgImg]];進行設(shè)置的時候,進行真機調(diào)試一點擊輸入框就閃退了,因為我手機上裝的是搜狗輸入法,個人不喜歡使用蘋果原生的輸入法,所以我就裝了搜狗輸入法,下面就是報錯截圖:

就是說使用colorWithPatternImage方法產(chǎn)生的報錯,那么既然是使用這個方法產(chǎn)生的報錯,那當(dāng)然就不能再使用這個方法了,要么就不要使用第三方輸入法,可是我自己寧愿不使用colorWithPatternImage方法,也要使用第三方輸入法,哈哈哈!其實使用colorWithPatternImage方法還會造成消耗內(nèi)存大的現(xiàn)象,所以換方法成了必然。但是我又面臨一個怎么設(shè)置背景顏色的漸變色問題了,那么網(wǎng)上的方法固然也很多,但是都沒有很好解決我最關(guān)注的問題,所以我就只能另辟蹊徑了,那么上面叫大家注意的代碼就是完美實現(xiàn)了漸變色和設(shè)置背景顏色的問題,而且還不會出現(xiàn)使用第三方輸入法出現(xiàn)APP閃退的問題。
歡迎大家聯(lián)系一起進步,QQ:834537795.