【问题标题】:ios Convert integer color to uicolor or hex values?ios 将整数颜色转换为 uicolor 或十六进制值?
【发布时间】:2014-01-28 21:48:48
【问题描述】:

在 android 中有一个选项,您可以根据 int 值设置颜色。无论如何我可以使用此值或转换此值以在 iOS 中将其设置为 UIColor 吗? 例如这个值,-5242884 可以在 android 中用于设置颜色。

据我所知,iOS 广泛使用十六进制值或 rgb 值来设置UIColor。但我在这里找不到有关我的问题的任何信息。无论如何,我可以使用 int 值代替。

【问题讨论】:

  • 负整数代表什么?
  • 其实是一个可以在android端设置的颜色值。在android中,我可以将该负整数值转换为十六进制值。但我想知道是否可以在 iOS 中转换该值。
  • int类型有4个字节,第一个字节代表红色值,第二个->绿色值,第三个->蓝色值,最后一个->alpha?
  • @KudoCC 坦率地说,我不太确定 int 值代表什么。我自己对所有这些都一无所知。
  • 我想你应该知道它是哪个色彩空间。如果是RGB,还是需要注意ARGB和RGBA。

标签: ios objective-c hex uicolor


【解决方案1】:

Swift 版本,如果它可以帮助任何人:

func getUIColorFromAndroidColorInt(androidColorInt: Int) -> UIColor {

        let red = (CGFloat) ( (androidColorInt>>16)&0xFF )
        let green = (CGFloat) ( (androidColorInt>>8)&0xFF )
        let blue = (CGFloat) ( (androidColorInt)&0xFF )

        return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1)

    }

【讨论】:

    【解决方案2】:

    这里将 HEX 值转换为 UIColor 的解决方案https://gist.github.com/Galeas/8348748

    【讨论】:

      【解决方案3】:

      您所引用的整数似乎是一个压缩整数。请参阅:android color documentation。您需要找到一种将打包的 int 转换为十六进制的方法,然后您可以使用此宏(获得 here)将十六进制数转换为 UIColor:

      #define HEXCOLOR(c) [UIColor colorWithRed:((c>>24)&0xFF)/255.0 green:((c>>16)&0xFF)/255.0 blue:((c>>8)&0xFF)/255.0  alpha:((c)&0xFF)/255.0]
      

      我知道这并不能真正回答您的问题,但它可以帮助您缩小搜索范围。

      编辑

      好的,我刚刚意识到上述宏确实解决了您的问题。只要给它整数表示,它就会给你正确的 UIColor。我的测试代码如下:

      UIColor *color = HEXCOLOR(-16776961); // Blue const from android link above
      const CGFloat *components = CGColorGetComponents(color.CGColor);
      NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]]; 
      NSLog(@"%@",colorAsString); // Prints 1.0 0.0 0.0 1.0 which corresponds to 0xff0000ff
      

      我从 here 那里得到了一些帮助。

      编辑

      修复了宏以期望正确的 RGBA 值:

      #define ANDROID_COLOR(c) [UIColor colorWithRed:((c>>16)&0xFF)/255.0 green:((c>>8)&0xFF)/255.0 blue:((c)&0xFF)/255.0  alpha:((c>>24)&0xFF)/255.0]
      

      之前的宏需要 RGBA,而 Android color int 需要 ARGB。

      【讨论】:

      • 谢谢...我很感激。我会调查的
      • UIColor *color = HEXCOLOR(-16776961); color 中的值在 android 中返回为蓝色,但在 iOS 中显示为红色。 =(不知何故,马可工作,但缺乏准确性。
      • @IssacZH。我认为这与 RGBA 值的顺序有关。 Android 颜色可能是 ARGB,而 UIColor 是 RGBA,所以基本上红色和蓝色会在示例中切换。修改宏以将它们按正确的顺序排列。我将发布对我的答案的编辑。
      • 成功了!非常感谢现在的颜色与android匹配。你是救生员。 =) 如果不是太多,请问是否可以将其从十六进制或 rgb 值反过来转换?
      • 我没有这样使用它,但我认为它是可能的。尝试对宏进行逆向工程。从十六进制的颜色分量开始,然后以另一种方式移位(
      猜你喜欢
      • 2013-08-08
      • 2011-10-19
      • 2020-08-06
      • 2014-09-19
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多