如何在Objective-C中通过UIColorFromRGB传递值

时间:2014-01-07 13:11:54

标签: ios objective-c

在此代码着色返回值= 0X90EE90

  coloring=[colorall objectForKey:globallinecolor];

     shapeLayer.strokeColor = UIColorFromRGB(coloring).CGColor;

但是这段代码给了我错误,任何人都可以帮助我如何通过UIColorFromRGB传递值。

4 个答案:

答案 0 :(得分:11)

创建方法宏,如:

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

并用作:

 self.backgroundColor = UIColorFromRGB(0X90EE90);

虽然OP在ObjC询问,但有人可能会来这里寻找Swift

func UIColorFromHex(rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

并用作:

let someColor = UIColorFromHex(0x27a9e0)

答案 1 :(得分:4)

您正在检索NSString对象(着色),但宏需要一个整数。

要从十六进制字符串中获取整数,您可以使用 NSScanner 类。

遵循:

unsigned int hexValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:coloring];
[scanner setScanLocation:0]; // depends on your exact string format you may have to use location 1
[scanner scanHexInt:&hexValue];

shapeLayer.strokeColor = UIColorFromRGB(hexValue).CGColor;

答案 2 :(得分:1)

我有类似的问题,我在网上发现了这个解决方案(现在找不到),这个解决方案已经接近别人放在这里但可能会有所帮助。

试试这个,

coloring=[colorall objectForKey:globallinecolor];
shapeLayer.strokeColor = UIColorFromRGB(colourFromHexString:coloring).CGColor;

然后

-(UIColor *)colourFromHexString:(NSString *)hexString
{
    unsigned rgbValue = 0;
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    [scanner setScanLocation:2]; // bypass '#' character
    [scanner scanHexInt:&rgbValue];
   return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0];
}

答案 3 :(得分:0)

或者您可以将十六进制值保存为整数,如下所示: [defaults setInteger:0x640800 forKey:@"in"];

然后做这样的事情:

defaults = [NSUserDefaults standardUserDefaults];
long rgbCode = [defaults integerForKey:packageName];
_languageButton.backgroundColor = UIColorFromRGB(rgbCode);