我正在实现我的第一个OS应用程序,我创建了一个CGColor扩展。有没有办法从一个十六进制字符串中得到一个CGColor?
谢谢!
发布于 2016-02-06 11:50:51
下面是从NSColor获取HexString的扩展
public extension NSColor {
public convenience init?(hexString: String) {
self.init(hexString: hexString, alpha: 1.0)
}
public convenience init?(hexString: String, alpha: Float) {
var hex = hexString
// Check for hash and remove the hash
if hex.hasPrefix("#") {
hex = hex.substringFromIndex(hex.startIndex.advancedBy(1))
}
if (hex.rangeOfString("(^[0-9A-Fa-f]{6}$)|(^[0-9A-Fa-f]{3}$)", options: .RegularExpressionSearch) != nil) {
// Deal with 3 character Hex strings
if hex.characters.count == 3 {
let redHex = hex.substringToIndex(hex.startIndex.advancedBy(1))
let greenHex = hex.substringWithRange(Range<String.Index>(start: hex.startIndex.advancedBy(1), end: hex.startIndex.advancedBy(2)))
let blueHex = hex.substringFromIndex(hex.startIndex.advancedBy(2))
hex = redHex + redHex + greenHex + greenHex + blueHex + blueHex
}
let redHex = hex.substringToIndex(hex.startIndex.advancedBy(2))
let greenHex = hex.substringWithRange(Range<String.Index>(start: hex.startIndex.advancedBy(2), end: hex.startIndex.advancedBy(4)))
let blueHex = hex.substringWithRange(Range<String.Index>(start: hex.startIndex.advancedBy(4), end: hex.startIndex.advancedBy(6)))
var redInt: CUnsignedInt = 0
var greenInt: CUnsignedInt = 0
var blueInt: CUnsignedInt = 0
NSScanner(string: redHex).scanHexInt(&redInt)
NSScanner(string: greenHex).scanHexInt(&greenInt)
NSScanner(string: blueHex).scanHexInt(&blueInt)
self.init(red: CGFloat(redInt) / 255.0, green: CGFloat(greenInt) / 255.0, blue: CGFloat(blueInt) / 255.0, alpha: CGFloat(alpha))
}
else {
// Note:
// The swift 1.1 compiler is currently unable to destroy partially initialized classes in all cases,
// so it disallows formation of a situation where it would have to. We consider this a bug to be fixed
// in future releases, not a feature. -- Apple Forum
self.init()
return nil
}
}示例:
let color: NSColor = NSColor(hexString: "#ff8942").CGColor发布于 2016-02-06 11:51:18
编辑:为Mac更新
我推荐一些我经常使用的东西。下面是我的NSColorExtension,它是NSColor类的一个扩展:
/**
* A NSColor extension
**/
public extension NSColor {
/**
Returns an NSColor instance from the given hex value
- parameter rgbValue: The hex value to be used for the color
- parameter alpha: The alpha value of the color
- returns: A NSColor instance from the given hex value
*/
public class func hexColor(rgbValue: Int, alpha: CGFloat = 1.0) -> NSColor {
return NSColor(red: ((CGFloat)((rgbValue & 0xFF0000) >> 16))/255.0, green:((CGFloat)((rgbValue & 0xFF00) >> 8))/255.0, blue:((CGFloat)(rgbValue & 0xFF))/255.0, alpha:alpha)
}
}您可以这样使用它:
NSColor.hexColor(0xff0000, alpha: 0.8)alpha值的默认值为1.0,因此如果您不想显式显示alpha值:
NSColor.hexColor(0xff0000)如果您想要CGColor值,可以使用以下方法:
NSColor.hexColor(0xff0000).CGColorhttps://stackoverflow.com/questions/35240607
复制相似问题