23

これで、16進文字列を次のようにrgbカラーに変換できます。

// Input is without the # ie : white = FFFFFF
+ (UIColor *)colorWithHexString:(NSString *)hexString
{
    unsigned int hex;
    [[NSScanner scannerWithString:hexString] scanHexInt:&hex];
    int r = (hex >> 16) & 0xFF;
    int g = (hex >> 8) & 0xFF;
    int b = (hex) & 0xFF;

    return [UIColor colorWithRed:r / 255.0f
                        green:g / 255.0f
                        blue:b / 255.0f
                        alpha:1.0f];
}

buどうすればrgbを16進文字列に変換できますか?

4

5 に答える 5

42

この方法を使用します:

- (NSString *)hexStringForColor:(UIColor *)color {
      const CGFloat *components = CGColorGetComponents(color.CGColor);
      CGFloat r = components[0];
      CGFloat g = components[1];
      CGFloat b = components[2];
      NSString *hexString=[NSString stringWithFormat:@"%02X%02X%02X", (int)(r * 255), (int)(g * 255), (int)(b * 255)];
      return hexString;
}
于 2012-12-27T08:51:41.653 に答える
8

Anoop の答えは正しくありません。試してみると、[UIColor blackColor]緑色の 16 進文字列が返されます。
理由は、システムが設定するメモリを節約するのに十分なクリーバーであるためです

。黒色
コンポーネント [0] = 0 (r=0、g=0、b=0) および
コンポーネント [1] = 1 (a=1) に設定します。

白色
コンポーネント [0] = 1 (r=1、g=1、b=1) および
コンポーネント [1] = 1 (a=1) の場合。


UIColor を 16 進数にするには、以下のカテゴリを使用します
UIColor+Utility.h

@interface UIColor (Utility)

/**
 Return representaiton in hex
 */
-(NSString*)representInHex;
@end

UIColor+Utility.m

@implementation UIColor (Utility)
-(NSString*)representInHex
{
    const CGFloat *components = CGColorGetComponents(self.CGColor);
    size_t count = CGColorGetNumberOfComponents(self.CGColor);

    if(count == 2){
        return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
                lroundf(components[0] * 255.0),
                lroundf(components[0] * 255.0),
                lroundf(components[0] * 255.0)];
    }else{
        return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
                lroundf(components[0] * 255.0),
                lroundf(components[1] * 255.0),
                lroundf(components[2] * 255.0)];
    }
}
@end

于 2016-11-24T00:56:47.897 に答える
6

これは私が Swift で使用したコードです。rgba 値で作成された UIColor を送信すると問題なく動作するように見えますが、次のような事前定義された色を送信すると奇妙な結果が返されることに注意してください。UIColor.darkGrayColor()

func hexFromUIColor(color: UIColor) -> String 
{
let hexString = String(format: "%02X%02X%02X", 
Int(CGColorGetComponents(color.CGColor)[0] * 255.0),
Int(CGColorGetComponents(color.CGColor)[1] *255.0),
Int(CGColorGetComponents(color.CGColor)[2] * 255.0))
return hexString
}
于 2015-01-07T04:03:03.747 に答える