我怎样才能从一个hexstring创build一个UIColor?
我怎样才能创build一个hexstring格式的UIColor
,如#00FF00
?
我发现最简单的方法是使用macros。 只需将其包含在您的标题中,并可在整个项目中使用。
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
与hex值的彩色macros
此代码的格式化版本:
#define UIColorFromRGB(rgbValue) \ [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 \ blue:((float)((rgbValue & 0x0000FF) >> 0))/255.0 \ alpha:1.0]
用法:
label.textColor = UIColorFromRGB(0xBC1128);
简明的解决scheme:
// Assumes input like "#00FF00" (#RRGGBB). + (UIColor *)colorFromHexString:(NSString *)hexString { unsigned rgbValue = 0; NSScanner *scanner = [NSScanner scannerWithString:hexString]; [scanner setScanLocation:1]; // bypass '#' character [scanner scanHexInt:&rgbValue]; return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; }
我有一个与Android使用的hex格式string100%兼容的解决scheme,在进行跨平台移动开发时,我发现它非常有用。 它让我在两个平台上都使用一种颜色。 如果您愿意,可以随意重复使用,不要使用归属地,也不要使用Apache许可证。
#import "UIColor+HexString.h" @interface UIColor(HexString) + (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length; @end @implementation UIColor(HexString) + (UIColor *) colorWithHexString: (NSString *) hexString { NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString]; CGFloat alpha, red, blue, green; switch ([colorString length]) { case 3: // #RGB alpha = 1.0f; red = [self colorComponentFrom: colorString start: 0 length: 1]; green = [self colorComponentFrom: colorString start: 1 length: 1]; blue = [self colorComponentFrom: colorString start: 2 length: 1]; break; case 4: // #ARGB alpha = [self colorComponentFrom: colorString start: 0 length: 1]; red = [self colorComponentFrom: colorString start: 1 length: 1]; green = [self colorComponentFrom: colorString start: 2 length: 1]; blue = [self colorComponentFrom: colorString start: 3 length: 1]; break; case 6: // #RRGGBB 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]; break; case 8: // #AARRGGBB alpha = [self colorComponentFrom: colorString start: 0 length: 2]; red = [self colorComponentFrom: colorString start: 2 length: 2]; green = [self colorComponentFrom: colorString start: 4 length: 2]; blue = [self colorComponentFrom: colorString start: 6 length: 2]; break; default: [NSException raise:@"Invalid color value" format: @"Color value %@ is invalid. It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexString]; break; } 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; } @end
关于如何解决OP从hexstring中提取UIColor
的问题有一篇很好的文章。 下面介绍的解决scheme与其他解决scheme不同,因为它支持可能包含以hexstring表示为前缀的“0x”或“#”的string值(请参见用法)
这是主要的位..
- (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha { // Convert hex string to an integer unsigned int hexint = [self intFromHexString:hexStr]; // Create color object, specifying alpha as well UIColor *color = [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255 green:((CGFloat) ((hexint & 0xFF00) >> 8))/255 blue:((CGFloat) (hexint & 0xFF))/255 alpha:alpha]; return color; }
帮手法
- (unsigned int)intFromHexString:(NSString *)hexStr { unsigned int hexInt = 0; // Create scanner NSScanner *scanner = [NSScanner scannerWithString:hexStr]; // Tell scanner to skip the # character [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]]; // Scan hex value [scanner scanHexInt:&hexInt]; return hexInt; }
用法:
NSString *hexStr1 = @"123ABC"; NSString *hexStr2 = @"#123ABC"; NSString *hexStr3 = @"0x123ABC"; UIColor *color1 = [self getUIColorObjectFromHexString:hexStr1 alpha:.9]; NSLog(@"UIColor: %@", color1); UIColor *color2 = [self getUIColorObjectFromHexString:hexStr2 alpha:.9]; NSLog(@"UIColor: %@", color2); UIColor *color3 = [self getUIColorObjectFromHexString:hexStr3 alpha:.9]; NSLog(@"UIColor: %@", color3);
完整的参考文章
Swift 2+
我已经把这个解决scheme移植到了Swift 2.2。 请注意,我已将alpha
参数更改为可选值,默认值设置为1.0。 我还根据Swift 2.2中的NSScanner
类的要求将inttypes更新为UInt32
。
func colorWithHexString(hexString: String, alpha:CGFloat? = 1.0) -> UIColor { // Convert hex string to an integer let hexint = Int(self.intFromHexString(hexString)) let red = CGFloat((hexint & 0xff0000) >> 16) / 255.0 let green = CGFloat((hexint & 0xff00) >> 8) / 255.0 let blue = CGFloat((hexint & 0xff) >> 0) / 255.0 let alpha = alpha! // Create color object, specifying alpha as well let color = UIColor(red: red, green: green, blue: blue, alpha: alpha) return color } func intFromHexString(hexStr: String) -> UInt32 { var hexInt: UInt32 = 0 // Create scanner let scanner: NSScanner = NSScanner(string: hexStr) // Tell scanner to skip the # character scanner.charactersToBeSkipped = NSCharacterSet(charactersInString: "#") // Scan hex value scanner.scanHexInt(&hexInt) return hexInt }
颜色hex参考
HTML颜色名称和代码
颜色hex颜色代码
使用此类别:
在UIColor + Hexadecimal.h文件中
#import <UIKit/UIKit.h> @interface UIColor(Hexadecimal) + (UIColor *)colorWithHexString:(NSString *)hexString; @end
在UIColor + Hexadecimal.m文件中
#import "UIColor+Hexadecimal.h" @implementation UIColor(Hexadecimal) + (UIColor *)colorWithHexString:(NSString *)hexString { unsigned rgbValue = 0; NSScanner *scanner = [NSScanner scannerWithString:hexString]; [scanner setScanLocation:1]; // bypass '#' character [scanner scanHexInt:&rgbValue]; return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; } @end
在课堂上你想使用它:
#import "UIColor+Hexadecimal.h"
和:
[UIColor colorWithHexString:@"#6e4b4b"];
这是一个函数,它接受一个hexstring并返回一个UIColor。
(您可以input任何格式的hexstring: ffffff
或ffffff
)
Swift 3:
func hexStringToUIColor (hex:String) -> UIColor { var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() if (cString.hasPrefix("#")) { cString.remove(at: cString.startIndex) } if ((cString.characters.count) != 6) { return UIColor.gray } var rgbValue:UInt32 = 0 Scanner(string: cString).scanHexInt32(&rgbValue) return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) }
Swift 2:
func hexStringToUIColor (hex:String) -> UIColor { var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString if (cString.hasPrefix("#")) { cString = cString.substringFromIndex(cString.startIndex.advancedBy(1)) } if ((cString.characters.count) != 6) { return UIColor.grayColor() } var rgbValue:UInt32 = 0 NSScanner(string: cString).scanHexInt(&rgbValue) return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) }
用法:
var color1 = hexStringToUIColor("#d3d3d3")
资料来源: arshad / gist:de147c42d7b3063ef7bc
一个伟大的Swift实现(更新Xcode 7)使用扩展,从各种不同的答案和地方拉到一起。 您最后还需要string扩展名。
使用:
let hexColor = UIColor(hex: "#00FF00")
注意:我在alpha通道的标准6位hex值的末尾添加了一个2位附加数字的选项(传入值为00
– 99
)。 如果这冒犯了你,就把它删除。 你可以实现它来传递一个可选的alpha参数。
延期:
extension UIColor { convenience init(var hex: String) { var alpha: Float = 100 let hexLength = hex.characters.count if !(hexLength == 7 || hexLength == 9) { // A hex must be either 7 or 9 characters (#RRGGBBAA) print("improper call to 'colorFromHex', hex length must be 7 or 9 chars (#GGRRBBAA)") self.init(white: 0, alpha: 1) return } if hexLength == 9 { // Note: this uses String subscripts as given below alpha = hex[7...8].floatValue hex = hex[0...6] } // Establishing the rgb color var rgb: UInt32 = 0 let s: NSScanner = NSScanner(string: hex) // Setting the scan location to ignore the leading `#` s.scanLocation = 1 // Scanning the int into the rgb colors s.scanHexInt(&rgb) // Creating the UIColor from hex int self.init( red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgb & 0x0000FF) / 255.0, alpha: CGFloat(alpha / 100) ) } }
string扩展名
浮动源
下标来源
extension String { /** Returns the float value of a string */ var floatValue: Float { return (self as NSString).floatValue } /** Subscript to allow for quick String substrings ["Hello"][0...1] = "He" */ subscript (r: Range<Int>) -> String { get { let start = self.startIndex.advancedBy(r.startIndex) let end = self.startIndex.advancedBy(r.endIndex - 1) return self.substringWithRange(start..<end) } } }
从我知道的hexstring到UIColor
(或CGColor
)没有内build转换。 但是,您可以轻松地为此编写几个函数 – 例如,请参阅iphone开发访问uicolor组件
你可以像这样做一个扩展
extension UIColor{ convenience init(rgb: UInt, alphaVal: CGFloat) { self.init( red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgb & 0x0000FF) / 255.0, alpha: alphaVal ) } }
并在这样的任何地方使用它
UIColor(rgb: 0xffffff, alphaVal: 0.2)
我find了一个很好的UIColor
类别, UIColor + PXExtensions 。
用法: UIColor *mycolor = [UIColor pxColorWithHexValue:@"#BADA55"];
而且,万一我的要点链接失败,这里是实际的实现代码:
// // UIColor+PXExtensions.m // #import "UIColor+UIColor_PXExtensions.h" @implementation UIColor (UIColor_PXExtensions) + (UIColor*)pxColorWithHexValue:(NSString*)hexValue { //Default UIColor *defaultResult = [UIColor blackColor]; //Strip prefixed # hash if ([hexValue hasPrefix:@"#"] && [hexValue length] > 1) { hexValue = [hexValue substringFromIndex:1]; } //Determine if 3 or 6 digits NSUInteger componentLength = 0; if ([hexValue length] == 3) { componentLength = 1; } else if ([hexValue length] == 6) { componentLength = 2; } else { return defaultResult; } BOOL isValid = YES; CGFloat components[3]; //Seperate the R,G,B values for (NSUInteger i = 0; i < 3; i++) { NSString *component = [hexValue substringWithRange:NSMakeRange(componentLength * i, componentLength)]; if (componentLength == 1) { component = [component stringByAppendingString:component]; } NSScanner *scanner = [NSScanner scannerWithString:component]; unsigned int value; isValid &= [scanner scanHexInt:&value]; components[i] = (CGFloat)value / 256.0f; } if (!isValid) { return defaultResult; } return [UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:1.0]; } @end
这是另一种select。
- (UIColor *)colorWithRGBHex:(UInt32)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]; }
您可以使用各种在线工具将HEXstring转换为实际的UIColor。 检查出uicolor.org或UI颜色select器 。 输出将被转换成Objective-C代码,如:
[UIColor colorWithRed:0.93 green:0.80 blue:0.80 alpha:1.0];
你可以embedded你的应用程序。 希望这可以帮助!
迅捷的版本。 作为功能或扩展使用。
function
func UIColorFromRGB(colorCode: String, alpha: Float = 1.0) -> UIColor{ var scanner = NSScanner(string:colorCode) var color:UInt32 = 0; scanner.scanHexInt(&color) let mask = 0x000000FF let r = CGFloat(Float(Int(color >> 16) & mask)/255.0) let g = CGFloat(Float(Int(color >> 8) & mask)/255.0) let b = CGFloat(Float(Int(color) & mask)/255.0) return UIColor(red: r, green: g, blue: b, alpha: CGFloat(alpha)) }
延期
extension UIColor { convenience init(colorCode: String, alpha: Float = 1.0){ var scanner = NSScanner(string:colorCode) var color:UInt32 = 0; scanner.scanHexInt(&color) let mask = 0x000000FF let r = CGFloat(Float(Int(color >> 16) & mask)/255.0) let g = CGFloat(Float(Int(color >> 8) & mask)/255.0) let b = CGFloat(Float(Int(color) & mask)/255.0) self.init(red: r, green: g, blue: b, alpha: CGFloat(alpha)) } }
如何打电话
let hexColorFromFunction = UIColorFromRGB("F4C124", alpha: 1.0) let hexColorFromExtension = UIColor(colorCode: "F4C124", alpha: 1.0)
您也可以从界面构build器中定义您的Hex Color
。
这对cocoapod支持很好
https://github.com/mRs-/HexColors
// with hash NSColor *colorWithHex = [NSColor colorWithHexString:@"#ff8942" alpha:1]; // wihtout hash NSColor *secondColorWithHex = [NSColor colorWithHexString:@"ff8942" alpha:1]; // short handling NSColor *shortColorWithHex = [NSColor colorWithHexString:@"fff" alpha:1]
另一个版本与阿尔法
#define UIColorFromRGBA(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF000000) >> 24))/255.0 green:((float)((rgbValue & 0xFF0000) >> 16))/255.0 blue:((float)((rgbValue & 0xFF00) >> 8 ))/255.0 alpha:((float)((rgbValue & 0xFF))/255.0)]
Swift相当于@Tr的答案,尽pipe接收RGBA Int值来支持透明度:
func colorWithHex(aHex: UInt) -> UIColor { return UIColor(red: CGFloat((aHex & 0xFF000000) >> 24) / 255, green: CGFloat((aHex & 0x00FF0000) >> 16) / 255, blue: CGFloat((aHex & 0x0000FF00) >> 8) / 255, alpha: CGFloat((aHex & 0x000000FF) >> 0) / 255) } //usage var color = colorWithHex(0x7F00FFFF)
如果你想从string中使用它,你可以使用strtoul:
var hexString = "0x7F00FFFF" let num = strtoul(hexString, nil, 16) var colorFromString = colorWithHex(num)
另一个实现允许string像"FFF"
或"FFFFFF"
并使用alpha:
+ (UIColor *) colorFromHexString:(NSString *)hexString alpha: (CGFloat)alpha{ NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""]; if([cleanString length] == 3) { cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)], [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)], [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]]; } if([cleanString length] == 6) { cleanString = [cleanString stringByAppendingString:@"ff"]; } unsigned int baseValue; [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue]; float red = ((baseValue >> 24) & 0xFF)/255.0f; float green = ((baseValue >> 16) & 0xFF)/255.0f; float blue = ((baseValue >> 8) & 0xFF)/255.0f; return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; }
这是一个Swift 1.2
版本,作为UIColor
的扩展。 这可以让你做到
let redColor = UIColor(hex: "#FF0000")
我觉得这是最自然的做法。
extension UIColor { // Initialiser for strings of format '#_RED_GREEN_BLUE_' convenience init(hex: String) { let redRange = Range<String.Index>(start: hex.startIndex.advancedBy(1), end: hex.startIndex.advancedBy(3)) let greenRange = Range<String.Index>(start: hex.startIndex.advancedBy(3), end: hex.startIndex.advancedBy(5)) let blueRange = Range<String.Index>(start: hex.startIndex.advancedBy(5), end: hex.startIndex.advancedBy(7)) var red : UInt32 = 0 var green : UInt32 = 0 var blue : UInt32 = 0 NSScanner(string: hex.substringWithRange(redRange)).scanHexInt(&red) NSScanner(string: hex.substringWithRange(greenRange)).scanHexInt(&green) NSScanner(string: hex.substringWithRange(blueRange)).scanHexInt(&blue) self.init( red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: 1 ) } }
更新为迅速1.2
class func colorWithHexString (hex:String) -> UIColor { var cString: NSString = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString if (cString.hasPrefix("#")) { cString = cString.substringFromIndex(1) } if (count(cString as String) != 6) { return UIColor.grayColor() } var rString: String = cString.substringToIndex(2) var gString: String = (cString.substringFromIndex(2) as NSString).substringToIndex(2) var bString: String = (cString.substringFromIndex(4) as NSString).substringToIndex(2) var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0; NSScanner(string: rString).scanHexInt(&r) NSScanner(string: gString).scanHexInt(&g) NSScanner(string: bString).scanHexInt(&b) return UIColor(red: CGFloat(Float(r) / 255.0), green: CGFloat(Float(g) / 255.0), blue: CGFloat(Float(b) / 255.0), alpha: CGFloat(1)) }
我喜欢确保除了颜色之外的阿尔法,所以我写我自己的类别
+ (UIColor *) colorWithHex:(int)color { float red = (color & 0xff000000) >> 24; float green = (color & 0x00ff0000) >> 16; float blue = (color & 0x0000ff00) >> 8; float alpha = (color & 0x000000ff); return [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha/255.0]; }
这样很容易使用
[UIColor colorWithHex:0xFF0000FF]; //Red [UIColor colorWithHex:0x00FF00FF]; //Green [UIColor colorWithHex:0x00FF00FF]; //Blue [UIColor colorWithHex:0x0000007F]; //transparent black
extension UIColor { convenience init(hexaString: String, alpha: CGFloat = 1) { let chars = Array(hexaString.characters) self.init(red: CGFloat(strtoul(String(chars[1...2]),nil,16))/255, green: CGFloat(strtoul(String(chars[3...4]),nil,16))/255, blue: CGFloat(strtoul(String(chars[5...6]),nil,16))/255, alpha: alpha)} }
用法:
let redColor = UIColor(hexaString: "#FF0000") // r 1,0 g 0,0 b 0,0 a 1,0 let transparentRed = UIColor(hexaString: "#FF0000", alpha: 0.5) // r 1,0 g 0,0 b 0,0 a 0,5
为UIColor
创build优雅的扩展:
extension UIColor { convenience init(string: String) { var uppercasedString = string.uppercased() uppercasedString.remove(at: string.startIndex) var rgbValue: UInt32 = 0 Scanner(string: uppercasedString).scanHexInt32(&rgbValue) let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0 let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0 let blue = CGFloat(rgbValue & 0x0000FF) / 255.0 self.init(red: red, green: green, blue: blue, alpha: 1) } }
创build红色:
let red = UIColor(string: "#ff0000")
extension UIColor { class func fromHexaString(hex:String) -> UIColor { let scanner = Scanner(string: hex) scanner.scanLocation = 0 var rgbValue: UInt64 = 0 scanner.scanHexInt64(&rgbValue) return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) } } //you can call like this. UIColor.fromHexaString(hex:3276b1)
我最终创build了一个UIColor
类别,我可以在其他项目中重用。 Github: https : //github.com/mattquiros/UIColorHexColor
用法如下所示:
UIColor *customRedColor = [UIColor colorFromHex:0x990000];
这比传递一个string并将其转换为一个数字然后移动这些比特要快得多。
您还可以从.pch
文件中导入类别,以便您可以轻松地在应用程序的任何位置使用colorFromHex
,如将其内置到UIColor
:
#ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> // Your other stuff here... #import "UIColor+HexColor.h" #endif
You Can Get UIColor From String Code Like circularSpinner.fillColor = [self getUIColorObjectFromHexString:@"27b8c8" alpha:9]; //Function For Hex Color Use - (unsigned int)intFromHexString:(NSString *)hexStr { unsigned int hexInt = 0; // Create scanner NSScanner *scanner = [NSScanner scannerWithString:hexStr]; // Tell scanner to skip the # character [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]]; // Scan hex value [scanner scanHexInt:&hexInt]; return hexInt; } - (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha { // Convert hex string to an integer unsigned int hexint = [self intFromHexString:hexStr]; // Create color object, specifying alpha as well UIColor *color = [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255 green:((CGFloat) ((hexint & 0xFF00) >> 8))/255 blue:((CGFloat) (hexint & 0xFF))/255 alpha:alpha]; return color; } /Function For Hex Color Use - (unsigned int)intFromHexString:(NSString *)hexStr { unsigned int hexInt = 0; // Create scanner NSScanner *scanner = [NSScanner scannerWithString:hexStr]; // Tell scanner to skip the # character [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]]; // Scan hex value [scanner scanHexInt:&hexInt]; return hexInt; } - (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha { // Convert hex string to an integer unsigned int hexint = [self intFromHexString:hexStr]; // Create color object, specifying alpha as well UIColor *color = [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255 green:((CGFloat) ((hexint & 0xFF00) >> 8))/255 blue:((CGFloat) (hexint & 0xFF))/255 alpha:alpha]; return color; }
我为此创build了一个便利的init:
extension UIColor { convenience init(hex: String, alpha: CGFloat) { let redH = CGFloat(strtoul(hex.substringToIndex(advance(hex.startIndex,2)), nil, 16)) let greenH = CGFloat(strtoul(hex.substringWithRange(Range<String.Index>(start: advance(hex.startIndex, 2), end: advance(hex.startIndex, 4))), nil, 16)) let blueH = CGFloat(strtoul(hex.substringFromIndex(advance(hex.startIndex,4)), nil, 16)) self.init(red: redH/255, green: greenH/255, blue: blueH/255, alpha: alpha) } }
那么你可以在你的项目中的任何地方创build一个UIColor,就像这样:
UIColor(hex: "ffe3c8", alpha: 1)
希望这可以帮助…
您可以创buildUIColor的扩展类为: –
扩展UIColor {
// MARK: – getColorFromHex / **这个函数将把颜色hex代码转换成RGB。
- parameter color hex string. - returns: RGB color code. */ class func getColorFromHex(hexString:String)->UIColor{ var rgbValue : UInt32 = 0 let scanner:NSScanner = NSScanner(string: hexString) scanner.scanLocation = 1 scanner.scanHexInt(&rgbValue) return UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0)) }
}
对于迅捷2.0+。 这段代码对我很好。
extension UIColor { /// UIColor(hexString: "#cc0000") internal convenience init?(hexString:String) { guard hexString.characters[hexString.startIndex] == Character("#") else { return nil } guard hexString.characters.count == "#000000".characters.count else { return nil } let digits = hexString.substringFromIndex(hexString.startIndex.advancedBy(1)) guard Int(digits,radix:16) != nil else{ return nil } let red = digits.substringToIndex(digits.startIndex.advancedBy(2)) let green = digits.substringWithRange(Range<String.Index>(start: digits.startIndex.advancedBy(2), end: digits.startIndex.advancedBy(4))) let blue = digits.substringWithRange(Range<String.Index>(start:digits.startIndex.advancedBy(4), end:digits.startIndex.advancedBy(6))) let redf = CGFloat(Double(Int(red, radix:16)!) / 255.0) let greenf = CGFloat(Double(Int(green, radix:16)!) / 255.0) let bluef = CGFloat(Double(Int(blue, radix:16)!) / 255.0) self.init(red: redf, green: greenf, blue: bluef, alpha: CGFloat(1.0)) } }
此代码包含string格式检查。 例如
let aColor = UIColor(hexString: "#dadada")! let failed = UIColor(hexString: "123zzzz")
And as far as I know, my code is of no disadvantage for its maintaining the semantic of failible condition and returning an optional value. And this should be the best answer.
You can use this library
https://github.com/burhanuddin353/TFTColor
迅速
UIColor.colorWithRGB(hexString: "FF34AE" alpha: 1.0)
Objective-C的
[UIColor colorWithRGBHexString:@"FF34AE" alpha:1.0f]
There is a nice UIColor category with many features in it.
用法:
textView.textColor = [UIColor colorWithHexString:textColorHex]; NSLog(@"Text Color Hex: %@", textColorHex);
Where textColorHex has a form of @"FFFFFF" without # symbol.