ぜひ使っておきたいマクロ 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にはしておきたいなと思いますが。。。