我已经检查了几个如何将UIColor代码转换为HEX的链接,但是我不确定如何调用该方法以在NSLog中显示它们。我没有发表评论的声誉,因此发布帖子是我的最后选择。 我希望在日志中运行我的应用程序时显示它。
第二,我在哪里输入RGB颜色编号(R = 30,G = 171,B = 13)?我看到所有示例都使用通常指向索引位置的数组[0],[1],[2],那么我应该在哪里添加颜色值?
我有以下代码:
- (NSString *) hexFromUIColor:(UIColor *)color { if (CGColorGetNumberOfComponents(color.CGColor) < 4) { const CGFloat *components = CGColorGetComponents(color.CGColor); color = [UIColor colorWithRed:components[30] green:components[141] blue:components[13] alpha:components[1]]; } if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) { return [NSString stringWithFormat:@"#FFFFFF"]; } return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0), (int)((CGColorGetComponents(color.CGColor))[1]*255.0), (int)((CGColorGetComponents(color.CGColor))[2]*255.0)]; }
我试图在viewDidLoad中调用该方法,但是如果没有UIColor它将无法工作。我相信这很简单。
感谢任何回答。
我在viewDidLoad中使用什么代码来调用此方法以便在NSLog中显示?
func hexStringFromColor(color: UIColor) -> String { let components = color.cgColor.components let r: CGFloat = components?[0] ?? 0.0 let g: CGFloat = components?[1] ?? 0.0 let b: CGFloat = components?[2] ?? 0.0 let hexString = String.init(format: "#%02lX%02lX%02lX", lroundf(Float(r * 255)), lroundf(Float(g * 255)), lroundf(Float(b * 255))) print(hexString) return hexString } func colorWithHexString(hexString: String) -> UIColor { var colorString = hexString.trimmingCharacters(in: .whitespacesAndNewlines) colorString = colorString.replacingOccurrences(of: "#", with: "").uppercased() print(colorString) let alpha: CGFloat = 1.0 let red: CGFloat = self.colorComponentFrom(colorString: colorString, start: 0, length: 2) let green: CGFloat = self.colorComponentFrom(colorString: colorString, start: 2, length: 2) let blue: CGFloat = self.colorComponentFrom(colorString: colorString, start: 4, length: 2) let color = UIColor(red: red, green: green, blue: blue, alpha: alpha) return color } func colorComponentFrom(colorString: String, start: Int, length: Int) -> CGFloat { let startIndex = colorString.index(colorString.startIndex, offsetBy: start) let endIndex = colorString.index(startIndex, offsetBy: length) let subString = colorString[startIndex..<endIndex] let fullHexString = length == 2 ? subString : "\(subString)\(subString)" var hexComponent: UInt32 = 0 guard Scanner(string: String(fullHexString)).scanHexInt32(&hexComponent) else { return 0 } let hexFloat: CGFloat = CGFloat(hexComponent) let floatValue: CGFloat = CGFloat(hexFloat / 255.0) print(floatValue) return floatValue }
如何使用
let red = CGFloat(30.0) let green = CGFloat(171.0) let blue = CGFloat(13.0) let alpha = CGFloat(1.0) let color = UIColor(red: CGFloat(red/255.0), green: CGFloat(green/255.0), blue: CGFloat(blue / 255.0), alpha: alpha) let colorCode = self.hexStringFromColor(color: color) print(colorCode) let resultColor = self.colorWithHexString(hexString: colorCode) print(resultColor)
- (NSString *)hexStringFromColor:(UIColor *)color { const CGFloat *components = CGColorGetComponents(color.CGColor); CGFloat r = components[0]; CGFloat g = components[1]; CGFloat b = components[2]; return [NSString stringWithFormat:@"#%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255)]; }
获取十六进制代码字符串后,调用以下方法获取 UIColor
UIColor
- (UIColor *) colorWithHexString: (NSString *) hexString { NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString]; NSLog(@"colorString :%@",colorString); CGFloat alpha, red, blue, green; // #RGB alpha = 1.0f; red = [self colorComponentFrom: colorString start: 0 length: 2]; green = [self colorComponentFrom: colorString start: 2 length: 2]; blue = [self colorComponentFrom: colorString start: 4 length: 2]; return [UIColor colorWithRed: red green: green blue: blue alpha: alpha]; } - (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length { NSString *substring = [string substringWithRange: NSMakeRange(start, length)]; NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring]; unsigned hexComponent; [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent]; return hexComponent / 255.0; }
// ( R = 30, G = 171, B = 13)? CGFloat red = 30.0; CGFloat green = 171.0; CGFloat blue = 13.0; CGFloat alpha = 255.0 UIColor *color = [UIColor colorWithRed:(red/255.0) green:(green/255.0) blue:(blue/255.0) alpha:(alpha/255.0)]; NSString *colorCode = [self hexStringFromColor:color]; NSLog(@"Color Code: %@", colorCode); UIColor *resultColor = [self colorWithHexString:colorCode];