iOS Tips #2 16進数でUIColorを生成する
iOSの色指定ってよくわかりません。Webあがりの私にとっては16進数で指定したいです。いつも16進数で色探して、そんでiOS用に変換して...ととても面倒です。
// #FF0000(ま、これなら[UIColor redColor]でいいんですが) [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];
というわけで、16進数で指定できるようUIColorのカテゴリーを定義しておきましょう。私の場合、UIColor+Hex.h、UIColor+Hex.mを定義して毎度使い回しています。以下、UIColor+Hex.h、UIColor+Hex.mを記載しておきます。
UIColor+Hex.h
#import <UIKit/UIKit.h> /** 16進数指定でUIColorを生成する。 */ @interface UIColor (Hex) /** 16進数で指定されたRGBでインスタンスを生成する @param colorCode RGB @return UIColorインスタンス */ + (UIColor *)colorWithHex:(NSString *)colorCode; /** 16進数で指定されたRGBとAlpha値でインスタンスを生成する @param colorCode RGB @param alpha Alpha値 @return UIColorインスタンス */ + (UIColor *)colorWithHex:(NSString *)colorCode alpha:(CGFloat)alpha; @end
UIColor+Hex.m
#import "UIColor+Hex.h" @implementation UIColor (Hex) + (UIColor *)colorWithHex:(NSString *)colorCode { return [UIColor colorWithHex:colorCode alpha:1.0]; } + (UIColor *)colorWithHex:(NSString *)colorCode alpha:(CGFloat)alpha { if ([[colorCode substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"#"]) { colorCode = [colorCode substringWithRange:NSMakeRange(1, colorCode.length - 1)]; } if ([colorCode length] == 3) { NSMutableString *_colorCode = [[NSMutableString alloc] init]; for (NSInteger i = 0; i < colorCode.length; i++) { [_colorCode appendString:[colorCode substringWithRange:NSMakeRange(i, 1)]]; [_colorCode appendString:[colorCode substringWithRange:NSMakeRange(i, 1)]]; } colorCode = [_colorCode copy]; } NSString *hexCodeStr; const char *hexCode; char *endptr; CGFloat red, green, blue; for (NSInteger i = 0; i < 3; i++) { hexCodeStr = [NSString stringWithFormat:@"+0x%@", [colorCode substringWithRange:NSMakeRange(i * 2, 2)]]; hexCode = [hexCodeStr cStringUsingEncoding:NSASCIIStringEncoding]; switch (i) { case 0: red = strtol(hexCode, &endptr, 16); break; case 1: green = strtol(hexCode, &endptr, 16); break; case 2: blue = strtol(hexCode, &endptr, 16); default: break; } } return [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:alpha]; } @end [/c] <p> これは以下のように使います。 </p> #import "UIColor+Hex.h" ・・・ UIColor *color = [UIColor colorWithHex:@"FF0000"]; // 先頭に「#」があっても大丈夫! UIColor *color = [UIColor colorWithHex:@"#FF0000"];
いつも思うんですが、カテゴリーってへんな感じですよね。直感的にはC#で言うpartialの方がわかりやすい気がします。
以上、短いですが、UIColorのTipsでした!