ios将整数颜色转换为uicolor或hex值?

时间:2014-01-10 03:11:10

标签: ios objective-c hex uicolor

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

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

3 个答案:

答案 0 :(得分:9)

您引用的整数似乎是一个压缩整数。见:android color documentation。您需要找到一种方法将packed 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。

答案 1 :(得分:1)

此处将HEX值转换为UIColor https://gist.github.com/Galeas/8348748

的解决方案

答案 2 :(得分:0)

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

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)

    }