Создать объект UIColor из значения ARGB
В базе данных есть несколько строк, где одно поле является значением ARGB для соответствующего цвета.
Я должен прочитать все строки этой таблицы и преобразовать десятичное значение ARGB в UIColor.
Я нашел это, но не нашел.
Есть ли способ подойти к этому?
Благодарю.
4 ответа
Решение
text.color = [UIColor colorWithRed:10.0/255.0 green:100.0/255.0 blue:55.0/255.0 alpha:1];
Вам просто нужно разделить значения RGB на 255 для правильной настройки.
Вот метод, который я придумал, чтобы преобразовать целое число ARGB в цвет пользовательского интерфейса. Протестировал его на нескольких цветах, которые мы имеем в нашей системе.NET
+(UIColor *)colorFromARGB:(int)argb {
int blue = argb & 0xff;
int green = argb >> 8 & 0xff;
int red = argb >> 16 & 0xff;
int alpha = argb >> 24 & 0xff;
return [UIColor colorWithRed:red/255.f green:green/255.f blue:blue/255.f alpha:alpha/255.f];
}
Вы можете определить макрос и использовать его во всем коде
#define UIColorFromARGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:((float)((rgbValue & 0xFF000000) >> 24))/255.0]
Это 2021 год, мы все используем Swift;) Итак, вот расширение Swift для решения этой проблемы:
extension UIColor {
/* Converts an AARRGGBB into a UIColor like Android Color.parseColor */
convenience init?(hexaARGB: String) {
var chars = Array(hexaARGB.hasPrefix("#") ? hexaARGB.dropFirst() : hexaARGB[...])
switch chars.count {
case 3: chars = chars.flatMap { [$0, $0] }; fallthrough
case 6: chars.append(contentsOf: ["F","F"])
case 8: break
default: return nil
}
self.init(red: .init(strtoul(String(chars[2...3]), nil, 16)) / 255,
green: .init(strtoul(String(chars[4...5]), nil, 16)) / 255,
blue: .init(strtoul(String(chars[6...7]), nil, 16)) / 255,
alpha: .init(strtoul(String(chars[0...1]), nil, 16)) / 255)
}
}
Применение
UIColor(hexaARGB: "#CCFCD204")