首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Hex中获取CGColor ( OS )

从Hex中获取CGColor ( OS )
EN

Stack Overflow用户
提问于 2016-02-06 11:45:06
回答 2查看 2.6K关注 0票数 1

我正在实现我的第一个OS应用程序,我创建了一个CGColor扩展。有没有办法从一个十六进制字符串中得到一个CGColor?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-06 11:50:51

下面是从NSColor获取HexString的扩展

代码语言:javascript
复制
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
    }
}

示例:

代码语言:javascript
复制
let color: NSColor = NSColor(hexString: "#ff8942").CGColor
票数 1
EN

Stack Overflow用户

发布于 2016-02-06 11:51:18

编辑:为Mac更新

我推荐一些我经常使用的东西。下面是我的NSColorExtension,它是NSColor类的一个扩展:

代码语言:javascript
复制
 /**
 * 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)

  }

}

您可以这样使用它:

代码语言:javascript
复制
NSColor.hexColor(0xff0000, alpha: 0.8)

alpha值的默认值为1.0,因此如果您不想显式显示alpha值:

代码语言:javascript
复制
NSColor.hexColor(0xff0000)

如果您想要CGColor值,可以使用以下方法:

代码语言:javascript
复制
NSColor.hexColor(0xff0000).CGColor
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35240607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档