この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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でした!