在android中有一个选项,你可以根据int值设置颜色。无论如何,我可以使用此值或将此值转换为在iOS中将其设置为UIColor
吗?
例如,可以在android中使用此值-5242884
来设置颜色。
从我设法找到的是iOS广泛使用十六进制值或rgb值来设置UIColor
。但我在这里找不到有关我的问题的任何信息。无论如何,我可以使用int值代替。
答案 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)
}