Как получить шестнадцатеричную строку из UIColor или из rgb
Теперь я могу преобразовать шестнадцатеричную строку в цвет rgb следующим образом:
// Input is without the # ie : white = FFFFFF
+ (UIColor *)colorWithHexString:(NSString *)hexString
{
unsigned int hex;
[[NSScanner scannerWithString:hexString] scanHexInt:&hex];
int r = (hex >> 16) & 0xFF;
int g = (hex >> 8) & 0xFF;
int b = (hex) & 0xFF;
return [UIColor colorWithRed:r / 255.0f
green:g / 255.0f
blue:b / 255.0f
alpha:1.0f];
}
bu как я могу преобразовать rgb в шестую строку?
Ответы
Ответ 1
Используйте этот метод:
- (NSString *)hexStringForColor:(UIColor *)color {
const CGFloat *components = CGColorGetComponents(color.CGColor);
CGFloat r = components[0];
CGFloat g = components[1];
CGFloat b = components[2];
NSString *hexString=[NSString stringWithFormat:@"%02X%02X%02X", (int)(r * 255), (int)(g * 255), (int)(b * 255)];
return hexString;
}
Ответ 2
Это код, который я использовал в Swift. Имейте в виду, что это нормально работает, когда вы отправляете ему UIColor, созданный с помощью значений rgba, но возвращаете некоторые странные результаты при отправке заранее определенных цветов, например t20 >
func hexFromUIColor(color: UIColor) -> String
{
let hexString = String(format: "%02X%02X%02X",
Int(CGColorGetComponents(color.CGColor)[0] * 255.0),
Int(CGColorGetComponents(color.CGColor)[1] *255.0),
Int(CGColorGetComponents(color.CGColor)[2] * 255.0))
return hexString
}
Ответ 3
Используйте это расширение UIColor для получения hexString.
extension: UIColor {
func toHexString() -> String {
var r:CGFloat = 0
var g:CGFloat = 0
var b:CGFloat = 0
var a:CGFloat = 0
getRed(&r, green: &g, blue: &b, alpha: &a)
let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0
return String(format:"#%06x", rgb)
}
}
Ответ 4
Ответ Anoop неверен, если вы попробуете его с помощью [UIColor blackColor]
, он вернет шестую строку зеленого цвета.
Причина в том, что система достаточно отладка, чтобы сохранить память, которую она установит
Для черного цвета - компонент [0] = 0 (r = 0, g = 0, b = 0) и компонент [1] = 1 (a = 1).
Для белого цвета - компонент [0] = 1 (r = 1, g = 1, b = 1) и компонент [1] = 1 (a = 1).
Использовать ниже категорию для UIColor для hex
UIColor+Utility.h
@interface UIColor (Utility)
/**
Return representaiton in hex
*/
-(NSString*)representInHex;
@end
UIColor+Utility.m
@implementation UIColor (Utility)
-(NSString*)representInHex
{
const CGFloat *components = CGColorGetComponents(self.CGColor);
size_t count = CGColorGetNumberOfComponents(self.CGColor);
if(count == 2){
return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
lroundf(components[0] * 255.0),
lroundf(components[0] * 255.0),
lroundf(components[0] * 255.0)];
}else{
return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
lroundf(components[0] * 255.0),
lroundf(components[1] * 255.0),
lroundf(components[2] * 255.0)];
}
}
@end