web-dev-qa-db-ja.com

HEX RGBカラーコードをUIColorに変換する方法は?

NSStringとして#ffffffのようなRGB 16進コードがあり、それをUIColorに変換したい。それを行う簡単な方法はありますか?

65
openfrog

私のいくつかのコードで 、私は2つの異なる機能を使用します:

void SKScanHexColor(NSString * hexString, float * red, float * green, float * blue, float * alpha) {
  NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
  if([cleanString length] == 3) {
      cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", 
                     [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)],
                     [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)],
                     [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]];
  }
  if([cleanString length] == 6) {
      cleanString = [cleanString stringByAppendingString:@"ff"];
  }

  unsigned int baseValue;
  [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue];

  if (red) { *red = ((baseValue >> 24) & 0xFF)/255.0f; }
  if (green) { *green = ((baseValue >> 16) & 0xFF)/255.0f; }
  if (blue) { *blue = ((baseValue >> 8) & 0xFF)/255.0f; }
  if (alpha) { *alpha = ((baseValue >> 0) & 0xFF)/255.0f; }
}

そして、次のように使用します。

UIColor * SKColorFromHexString(NSString * hexString) {
  float red, green, blue, alpha;
  SKScanHexColor(hexString, &red, &green, &blue, &alpha);

  return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}

これをUIColorカテゴリーとして使用する場合、数行を変更するだけです。

+ (UIColor *) colorFromHexString:(NSString *)hexString {
  NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
  if([cleanString length] == 3) {
      cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", 
                     [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)],
                     [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)],
                     [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]];
  }
  if([cleanString length] == 6) {
      cleanString = [cleanString stringByAppendingString:@"ff"];
  }

  unsigned int baseValue;
  [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue];

  float red = ((baseValue >> 24) & 0xFF)/255.0f;
  float green = ((baseValue >> 16) & 0xFF)/255.0f;
  float blue = ((baseValue >> 8) & 0xFF)/255.0f;
  float alpha = ((baseValue >> 0) & 0xFF)/255.0f;

  return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}

これは、「#abc」、「#abcdef31」などの文字列を処理します。

102
Dave DeLong

16進値を使用している場合..

#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]

  //Then use any Hex value

 self.view.backgroundColor = UIColorFromRGB(0xD2691E);   
84
kthorat

私は簡単な解決策を探していて、これを思いつきました(完全にObjective-Cではなく、魅力のように機能します):

NSString *stringColor = @"#AABBCC";
NSUInteger red, green, blue;
sscanf([stringColor UTF8String], "#%02X%02X%02X", &red, &green, &blue);

UIColor *color = [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1];
34
Bhatia

"UIColor + Expanded" というUIColorのNiceカテゴリがあり、RGB 16進数文字列からUIColorを取得するクラスメソッドがあります。

使い方は簡単です:

UIColor *myColor = [UIColor colorWithHexString:@"FF0000"];

さらに、潜在的に有用な他の多くのユーティリティがUIColorに追加されます。詳細は この記事 にあります。

19
Jim Rhoades

簡単、このWebサイトにアクセスして16進値を入力するだけです。 http://www.corecoding.com/utilities/rgb-or-hex-to-float.php

10
MikeTheCoder
+ (UIColor *)colorWithHexString:(NSString *)colorString
{
    colorString = [colorString stringByReplacingOccurrencesOfString:@"#" withString:@""];

    if (colorString.length == 3)
        colorString = [NSString stringWithFormat:@"%c%c%c%c%c%c",
        [colorString characterAtIndex:0], [colorString characterAtIndex:0],
        [colorString characterAtIndex:1], [colorString characterAtIndex:1],
        [colorString characterAtIndex:2], [colorString characterAtIndex:2]];

    if (colorString.length == 6)
    {
        int r, g, b;
        sscanf([colorString UTF8String], "%2x%2x%2x", &r, &g, &b);
        return [UIColor colorWithRed:(r/255.0) green:(g/255.0) blue:(b/255.0) alpha:1.0];
    }
    return nil;
}

フォーマット#123、123、#fff195、fff195の場合

+ (UIColor *)colorWithHexValue:(int)hexValue
{
    float red   = ((hexValue & 0xFF0000) >> 16)/255.0;
    float green = ((hexValue & 0xFF00) >> 8)/255.0;
    float blue  = (hexValue & 0xFF)/255.0;
    return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}

フォーマット0xfff195の場合

7
ChikabuZ

私が見つけた最も簡単な方法: Hex to UIColor Converter

「#」なしで16進数を入力するだけで、UIColorコードが返されます。たとえば、オレンジ色(#f77f00)のコードは次のとおりです。

[UIColor colorWithRed:0.969 green:0.498 blue:0 alpha:1.0]
5
Ehsan

6文字を3つのペアに分割し、それを10進数に変換し、それを255で除算して各色成分を浮動小数点数にしたと思います。

その後、コンポーネントを以下に渡すことができます。

[UIColor colorWithRed: green: blue: alpha:1];
3
Codebeef

SwiftおよびObjective-Cの16進コードを即座にUIColorコードスニペットに変換するオンラインツールを作成しました。カスタムメソッドまたはプラグインを使用するのが不便な場合: https:/ /iosref.com/uihex/

3
Eugene

上記のすべてのコードを書きたくない場合は、このサイトを確認できます。 http://www.diovo.com/apps/rgb-to-uicolor-converter.html
このようなHEXカラー:#FFFFFFから、サイトは次のような文字列に変換します:

UIColor *aColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.000];
2
matteodv

ObjectiveCからSwiftに変換するのが難しい場合、Swiftでの答えはここにあります。現在、#なしの文字列のみを受け取りますが、スキャナーメソッドを追加してスキップできます。

func stringToColor(stringColor: String) -> UIColor {
    var hexInt: UInt32 = 0
    let scanner = NSScanner(string: stringColor)
    scanner.scanHexInt(&hexInt)
    let color = UIColor(
        red: CGFloat((hexInt & 0xFF0000) >> 16)/255,
        green: CGFloat((hexInt & 0xFF00) >> 8)/255,
        blue: CGFloat((hexInt & 0xFF))/255,
        alpha: 1)

    return color
}
2
Tom Prats

16進値をRGBに変換する のオプションがあり、それらをインターフェースビルダーに入力することを忘れないでください。数行のコードを保存します。

rgb sliders

1
Kyle Clegg

ここでは少し遅いと思いますが、Wh​​iteHouse Githubリポジトリでこのバージョンを見つけました。

+(UIColor *)colorFromRGBHexString:(NSString *)colorString {
    if(colorString.length == 7) {
        const char *colorUTF8String = [colorString UTF8String];
        int r, g, b;
        sscanf(colorUTF8String, "#%2x%2x%2x", &r, &g, &b);
        return [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:1.0];
    }    
    return nil;
}

githubのWHAppConfig.mへのソースリンク

1

最終的に、他のプロジェクトで再利用できるUIColorのカテゴリを作成しました。

Objective-C

#import <UIKit/UIKit.h>

@interface UIColor (HexColor)

+ (UIColor *)colorFromHex:(unsigned long)hex;

@end

@implementation UIColor (HexColor)

+ (UIColor *)colorFromHex:(unsigned long)hex
{
  return [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 green:((float)((hex & 0xFF00) >> 8))/255.0 blue:((float)(hex & 0xFF))/255.0 alpha:1.0];
}

@end

// USAGE
UIColor *customRedColor = [UIColor colorFromHex:0x990000];

スイフト

extension UIColor {

  convenience init(hex: Int) {
    let red = CGFloat((hex & 0xff0000) >> 16) / 255.0
    let green = CGFloat((hex & 0x00ff00) >> 8) / 255.0
    let blue = CGFloat(hex & 0x0000ff) / 255.0
    self.init(red: red, green: green, blue: blue, alpha: 1.0)
  }

}

// USAGE
let customColor = UIColor(hex: 0x990000)
0
Matthew Quiros

「#RRGGBB」の値を使用してUIColorを作成する際に、cocoapodライブラリが非常に役立つことがわかりました。

pod 'UIColor-HexRGB'
0
Ramesh
+(UIColor*)colorWithHexString:(NSString*)hexString

{

NSString *cString = [[hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

if ([cString length] < 6) return [UIColor grayColor];

if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

if ([cString length] != 6) return  [UIColor grayColor];

NSRange range;
range.location = 0;
range.length = 2;
NSString *rString = [cString substringWithRange:range];

range.location = 2;
NSString *gString = [cString substringWithRange:range];

range.location = 4;
NSString *bString = [cString substringWithRange:range];

unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];

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

}

0
Kemo

16進数の値を使用する場合、さらに簡単な方法があると思います。ファイルの先頭に定義を追加するか、変換用のヘッダーファイル(UIColorFromRGB)を参照します。固定HEXカラー値のテンプレートを追加することもできます。

#define CLR_YELLOW_TEXT     0xf4dc89    // A Light Yellow text
#define CLR_GREEN_TEXT      0x008040    // Dark Green text for my buttons

#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]

次に、HEX値を直接使用するか、定義済みの16進値を使用して、コード内で参照します。例えば...

[myButton1 setTitleColor:UIColorFromRGB(0xd02d2d) forState:UIControlStateNormal];
[myButton2 setTitleColor:UIColorFromRGB(CLR_GREEN_TEXT) forState:UIControlStateNormal];
[myButton3 setTitleColor:UIColorFromRGB(CLR_YELLOW_TEXT) forState:UIControlStateNormal];

(PS-これは1.0のアルファを想定していますが、定義ではいつでも変更できます)。

楽しい。

0
Blaine L