圖片UIImage方式實現(xiàn)漸變色UIColor的方法與***Assertionfailurein-[UICGColor encodeWithCoder:]的報錯第三方搜狗百度等等輸入法閃退的解決辦法

? ? 前段時間我們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分類了,到目前為止還不知道怎么在簡書上面插入代碼,有知道的朋友告知一下,謝謝!

那下面就說說我是怎么使用這個的:


漸變色設(shè)置

注意上面注釋了一行代碼和注釋那行代碼上面的代碼?。?!

這樣子我就實現(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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容