【问题标题】:How to pass value through UIColorFromRGB in Objective-C如何在 Objective-C 中通过 UIColorFromRGB 传递值
【发布时间】:2014-01-07 13:11:53
【问题描述】:

在这段代码中着色返回值=0X90EE90

  coloring=[colorall objectForKey:globallinecolor];

     shapeLayer.strokeColor = UIColorFromRGB(coloring).CGColor;

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

【问题讨论】:

  • coloring的类型是什么,错误是什么?另外,请查看stackoverflow.com/questions/5563552/hex-to-uicolorfromrgb
  • 您遇到了什么错误?
  • coloring is (NSString *coloring=[[NSString alloc]init];) errr: 二​​进制表达式的无效操作数('NSString *' and 'int')
  • @Ron 你能发布 NSString 对象的值吗?谢谢
  • 值是 0X90EE90 这是一个颜色代码

标签: ios objective-c


【解决方案1】:

创建一个方法宏,如:

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

【讨论】:

  • 我已经完成了这些,但是在 (0XFFFFFF) 中,我需要将动态值放在那里,我从 coloring=[colorall objectForKey:globallinecolor];
  • coloring的数据类型是什么?
  • coloring is (NSString *coloring=[[NSString alloc]init];) errr: 二​​进制表达式的无效操作数('NSString *' and 'int')
  • 您需要将字符串转换为十六进制。看看Prasanna Guptastackoverflow.com/questions/3056757/…的答案
  • @preetam - 不需要转换为十六进制,但需要是数字,而不是字符串。使用integerValue 应该可以。 (好吧,也许不是十六进制——在存储到字符串之前将十六进制转换为十进制。)
【解决方案2】:

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

要从十六进制字符串中获取整数,您可以使用 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;

【讨论】:

  • 我已经尝试过了,但是如果我执行 [coloring integerValue] 的 NSLog,它会返回 0
【解决方案3】:

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

试试这个,

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];
}

【讨论】:

    【解决方案4】:

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

    然后做这样的事情:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2011-02-14
      • 2021-03-28
      • 1970-01-01
      • 2023-04-09
      • 2014-07-05
      相关资源
      最近更新 更多