ぜひ使っておきたいマクロ RGBとHexを簡単に!
連投です。
Objective-cにはマクロを定義する方法があります。
通常は
#define JSON_URL @"http://hoge.com/hoge.json"
のように定数化する方法をよく使ってるかと思います。
これと同じように
#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1] #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
とすることで
hoge.textColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
としていた箇所を
hogeLabel.textColor = RGB(249,77,77);
とRGBで指定することができます。
RGBAは透過指定するときに利用してください。
通常はこれで大体大丈夫かと思うんですが、デザイナーから届いたものがHexだったりしますよね。
#FFFFFF
のようなHTMLのカラーコード指定方法ですね。
これもマクロで解決することができます。
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
と
- (unsigned int)intFromHexString:(NSString *)hexStr{ unsigned int hexInt = 0; NSScanner *scanner = [NSScanner scannerWithString:hexStr]; [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]]; [scanner scanHexInt:&hexInt]; return hexInt; }
を用意しておいて
hoge.textColor = UIColorFromRGB([self intFromHexString:@"#FFFFFF"]);
とするだけです。
ただHexにするために無駄な処理を挟むより、せめてRGBにはしておきたいなと思いますが。。。