UIColor拡張いろいろ

UIColorの拡張を色々作ったので投稿。

下に解説あります。

まずどこでもいいので以下コピペしてください

```swift:ex.swift
//=============================================
//RM
extension UIColor {
    var is_dark:Bool{
        get{
            var ans = true
            let v = max(r*0.9, g*0.8, b*0.4)
            if v>0.5 {
                ans = false
            }
            return ans
        }
    }
    var hexColor: UInt32 {
        let colorSpace = CGColorGetColorSpace(self.CGColor)
        let colorSpaceModel = CGColorSpaceGetModel(colorSpace)
        if colorSpaceModel.rawValue == 1 {
            let x = CGColorGetComponents(self.CGColor)
            let r: Int = Int(x[0] * 255.0)
            let g: Int = Int(x[1] * 255.0)
            let b: Int = Int(x[2] * 255.0)
            let hex = UInt32(r >> 4 + g >> 2 + b)
            return hex
        }else{
            return 0
        }
    }
    func setAlpha(alpha: CGFloat)->UIColor{
        return UIColor(red: r, green: g, blue: b, alpha: alpha)
    }
    var r:CGFloat{
        let colorSpace = CGColorGetColorSpace(self.CGColor)
        let colorSpaceModel = CGColorSpaceGetModel(colorSpace)
        if colorSpaceModel.rawValue == 1 {
            let x = CGColorGetComponents(self.CGColor)
            return x[0]
        }else{
            return 0
        }
    }
    var g:CGFloat{
        let colorSpace = CGColorGetColorSpace(self.CGColor)
        let colorSpaceModel = CGColorSpaceGetModel(colorSpace)
        if colorSpaceModel.rawValue == 1 {
            let x = CGColorGetComponents(self.CGColor)
            return x[1]
        }else{
            return 0
        }
    }
    var b:CGFloat{
        let colorSpace = CGColorGetColorSpace(self.CGColor)
        let colorSpaceModel = CGColorSpaceGetModel(colorSpace)
        if colorSpaceModel.rawValue == 1 {
            let x = CGColorGetComponents(self.CGColor)
            return x[2]
        }else{
            return 0
        }
    }
    var a:CGFloat{
        let colorSpace = CGColorGetColorSpace(self.CGColor)
        let colorSpaceModel = CGColorSpaceGetModel(colorSpace)
        if colorSpaceModel.rawValue == 1 {
            let x = CGColorGetComponents(self.CGColor)
            return x[3]
        }else{
            return 0
        }
    }
    class func hex (hex : UInt32, alpha : CGFloat) -> UIColor {
        let hexStr = String(hex, radix: 16)
        let scanner = NSScanner(string: hexStr as String)
        var color: UInt32 = 0
        if scanner.scanHexInt(&color) {
            let r = CGFloat((color & 0xFF0000) >> 16) / 255.0
            let g = CGFloat((color & 0x00FF00) >> 8) / 255.0
            let b = CGFloat(color & 0x0000FF) / 255.0
            return UIColor(red:r,green:g,blue:b,alpha:alpha)
        }else{
            return UIColor(white: 1, alpha: alpha)
        }
    }
    class func hexStr (hexStr : NSString, alpha : CGFloat) -> UIColor {
        var color = UIColor()
        switch hexStr {
        case "0":
            color = UIColor(red: 0, green: 0, blue: 0, alpha: alpha)
        case "1":
            color = UIColor(red: 1, green: 1, blue: 1, alpha: alpha)
        case "r":
            color = UIColor(red: 1, green: 0, blue: 0, alpha: alpha)
        case "g":
            color = UIColor(red: 0, green: 1, blue: 0, alpha: alpha)
        case "b":
            color = UIColor(red: 0, green: 0, blue: 1, alpha: alpha)
        default:
            let hexStr = hexStr.stringByReplacingOccurrencesOfString("#", withString: "")
            let scanner = NSScanner(string: hexStr as String)
            var colorNum: UInt32 = 0
            if scanner.scanHexInt(&colorNum) {
                let r = CGFloat((colorNum & 0xFF0000) >> 16) / 255.0
                let g = CGFloat((colorNum & 0x00FF00) >> 8) / 255.0
                let b = CGFloat(colorNum & 0x0000FF) / 255.0
                color = UIColor(red:r,green:g,blue:b,alpha:alpha)
            }else{
                color = UIColor(white: 1, alpha: alpha)
            }
        }
        return color
    }
}
```

##is_dark
プロパティです
UIColorが暗いかどうか、上に置くアイコンの色の決定とか
本当なら色の明度を直接取るべきなんでしょうが、原色の持つ明度を考えると
[r*0.9, g*0.8, b*0.4]となるんです。
まあここら辺は自分の感性で合わせてください。

```swift
let color = UIColor.redColor()
if color.is_dark {
     //暗かったとき
}else{
    //明るかったとき
}
```


##setAlpha
メソッドです
UIColorのAlphaだけ変更します。
仕様上、extensionから自身に代入はできないのでコードの方で代入してあげてください。


```swift
var color = UIColor.redColor()
color = color.setAlpha(0.5)
```

##hexColor
プロパティです
UIColorのHex値です。でも使うのはお勧めしません。
（16進の処理がめんどくさい）

```
//めんどい、飛ばす
```

## r、g、b、a
プロパティです。
それぞれUIColorのRed、Green、Blue、Alphaに対応します。
0から1までで返ってきます。お好みで255かけてHexにしてください。
（以外と0〜1出力の方が使いやすい場面もある）

```swift
let color = UIColor.redColor()
print(color.r)    //1.0
print(color.g)    //0.0
print(color.b)    //0.0
print(color.a)    //1.0
```

##hex

クラスメソッドです。
Hexから色を作成します。

```swift
let red = UIColor.hex(0xff0000, alpha:1)//赤
```

##hexStr

クラスメソッドです。
Hex文字列から色を作成します。
文字列先頭の#はあってもなくてもOKです。

```swift
let green = UIColor.hexStr("00ff00", alpha:1)//緑
ler blue = UIColor.hexStr("#0000ff", alpha:1)//青
```

####おまけ
`hexStr("0", alpha : 1)`
のとき黒
`hexStr("1", alpha : 1)`
のとき白
`hexStr("r", alpha : 1)`
のとき赤
`hexStr("g", alpha : 1)`
のとき緑
`hexStr("b", alpha : 1)`
のとき青

が返ってきます。

その他自分のよく使う色、アプリのテーマカラーなどを追加しておくといいかも
自分は
`hexStr("mainColor", alpha : 1)`
のときアプリのテーマカラー
`hexStr("TextColor", alpha : 1)`
のとき文字の色

とかやってます

####RM

swiftのextensionの変数は値を持てないから、
できることは限られるけど標準クラス拡張はあまりに便利