文字列16進数カラーで UIColor を作成する

2011/12/09

16進数の設定方法が、UIColor には実装されていない(?)ようなので、カスタムで作る必要があります。 例えば、FF0000AA(RGBA)を UIColor に変更するには、 (1) 文字列をカラーとアルファに分割 (2) 各文字列の16進数表示を、NSScanner を利用して int に変更する (3) int 値を、R, G, B, A それぞれに小数に変換(255.0f で割る)する (4) UIColor を作成する

16 進数の文字列 (NSString) を数値型 (int) に変換する を参考にしました。

サンプル

-(UIColor*) hexToUIColor:(NSString *)hex
{
    NSRange colorRange = NSMakeRange(0, 6);
    NSRange alphaRange = NSMakeRange(6, 2);
    NSString *colorString = [hex substringWithRange:colorRange];
    NSString *alphaString = [hex substringWithRange:alphaRange];
    
    NSScanner *colorScanner = [NSScanner scannerWithString:colorString];
    NSScanner *alphaScanner = [NSScanner scannerWithString:alphaString];
    
    unsigned int color;
    unsigned int alpha;
    [colorScanner scanHexInt:&color];
    [alphaScanner scanHexInt:&alpha];
    
    CGFloat r = ((color & 0xFF0000) >> 16)/255.0f;
    CGFloat g = ((color & 0x00FF00) >> 8) /255.0f;
    CGFloat b =  (color & 0x0000FF) /255.0f;
    CGFloat a = alpha /255.0f;
    
    return [UIColor colorWithRed:r green:g blue:b alpha:a];
}

わざわざ文字列分割しなくても、0xFF000000 >> 24 みたくしても良いかとは思いますが。