iOS的分類方法冻辩,簡(jiǎn)言其作用為拓展類方法,增加類的多樣性和功能性
1拆祈、建立UIColor的分類方法恨闪,本例采用的是命名為WYG生成UIColor+WYG的聲明文件和實(shí)現(xiàn)文件
2、在UIColor+WYG.h的文件中放坏,聲明兩個(gè)類方法提供給UIColor使用咙咽,分別為:
//聲明直接輸入顏色代碼以字符串形式傳入的方法,單參形式
+(UIColor *)colorWithHexString:(NSString *)colorString;
//聲明直接輸入顏色代碼以字符串形式傳入和透明度以CGFloat形式傳入的方法淤年,兩個(gè)輸出參數(shù)
+(UIColor *)colorWithHexString:(NSString *)colorString Alpha:(CGFloat)alpha;
3钧敞、實(shí)現(xiàn)文件:為了使兩個(gè)類方法可以得到更好的利用,可以將第一個(gè)實(shí)現(xiàn)方法寫成下面方式
+(UIColor *)colorWithHexString:(NSString *)colorString{
return [self colorWithHexString:colorString Alpha:1.0f];
}
然后實(shí)現(xiàn)上方法的調(diào)用方法麸粮,也就是最后的設(shè)定顏色的實(shí)現(xiàn)
+(UIColor *)colorWithHexString:(NSString *)colorString Alpha:(CGFloat)alpha{
// 轉(zhuǎn)化傳進(jìn)來(lái)的字符串溉苛,去除空格
NSString *tranString = [[colorString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// 如果直接輸入6位顏色碼也可以讓處理
if (tranString.length < 6) {
// 小于6位的為 非法的顏色代碼
return [UIColor whiteColor];
}else if (tranString.length == 6){
return [self colorWithRGB:tranString Alpha:alpha];
}else{
// 判斷字符串格式的問(wèn)題--從計(jì)算機(jī)的數(shù)值表示上講,0x開頭的其實(shí)并不是所謂顏色代碼的表示方法弄诲,而是16進(jìn)制數(shù)的標(biāo)準(zhǔn)寫法愚战。譬如0xA就是十進(jìn)制的10。
// 而#開頭的六(或三)位十六進(jìn)制數(shù)是在設(shè)計(jì)領(lǐng)域(如CSS以及一些繪圖軟件)中顏色代碼的表示方法齐遵。
if ([tranString hasPrefix:@"0X"]||[tranString hasPrefix:@"0x"]) {
tranString = [tranString substringWithRange:NSMakeRange(2, tranString.length-2)];
}else if ([tranString hasPrefix:@"#"]) {
tranString = [tranString substringWithRange:NSMakeRange(1, tranString.length-1)];
}else{
return [UIColor whiteColor];
}
}
// 返回所設(shè)置的顏色
return [self colorWithRGB:tranString Alpha:alpha];
}
+(UIColor *)colorWithRGB:(NSString *)rgbString Alpha:(CGFloat)alpha{
NSRange range;
range.length = 2;
// R
range.location = 0;
NSString *rString = [rgbString substringWithRange:range];
// G
range.location = 2;
NSString *gString = [rgbString substringWithRange:range];
// B
range.location = 4;
NSString *bString = [rgbString substringWithRange:range];
// NSScanner是一個(gè)類寂玲,用于在字符串中掃描指定的字符,尤其是把它們翻譯/轉(zhuǎn)換為數(shù)字和別的字符串梗摇⊥赜矗可以在創(chuàng)建NSScaner時(shí)指定它的string屬性,然后scanner會(huì)按照你的要求從頭到尾地掃描這個(gè)字符串的每個(gè)字符
unsigned int R, G ,B;
[[NSScanner scannerWithString:rString] scanHexInt:&R];
[[NSScanner scannerWithString:gString] scanHexInt:&G];
[[NSScanner scannerWithString:bString] scanHexInt:&B];
return [UIColor colorWithRed:((float) R/255.f) green:((float) G/255.f) blue:((float) B/255.f) alpha:alpha];
}
->關(guān)于顏色代碼有一塊不嚴(yán)謹(jǐn)?shù)牡胤剑?/p>
后面跟3個(gè)十六進(jìn)制數(shù)是被允許的留美,比如#ABC表示的顏色和#AABBCC表示的顏色相同彰檬。但是跟1伸刃、2、4逢倍、5個(gè)十六進(jìn)制數(shù)仍然是非法的顏色代碼捧颅,1、2较雕、4碉哑、5個(gè)十六進(jìn)制數(shù)仍然是非法的顏色代碼。(代碼中值僅對(duì)6個(gè)十六進(jìn)制做實(shí)現(xiàn)亮蒋,3個(gè)的忽略了)
具體實(shí)現(xiàn)比較簡(jiǎn)單扣典,寫一次,以后代碼中直接引用文件就可以了慎玖,不用再實(shí)現(xiàn)一遍或者設(shè)計(jì)了贮尖,根據(jù)PM的要求的顏色代碼直接調(diào)用就可以了,豈不是簡(jiǎn)單的很趁怔,建議加入自己的代碼庫(kù)中湿硝。
GitHub 代碼上傳好的時(shí)候就在底下更新demo地址,謝謝润努!