8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS11のColor Setを使いたいので、UIColorにextensionを追加してみた

Last updated at Posted at 2017-08-02

Color Setが便利そうなので使おうと思ってソースを修正してから、iOS10では使えないことに気づいたので、UIColorに関数を追加してなんとか動くようにしてみたのでメモ。

xcassetsは下記

スクリーンショット 2017-08-02 19.29.13.png

UIColorに関数を追加(iOS10以下は色を定義)

extension UIColor {
    ///
    /// UIColor.init(named: String)がiOS11以降からしか使えないのでiOS10用処理
    ///
    static func Init(named: String) -> UIColor {
        if #available(iOS 11.0, *) {
            guard let _0_c: UIColor = UIColor.init(named: named) else {
                return UIColor.clear
            }
            return _0_c
        } else {
            switch named {
            case "Accent":     return #colorLiteral(red: 0.3490196078, green: 0.2431372549, blue: 0.9764705882, alpha: 1)
            case "Base":       return #colorLiteral(red: 0.01176470588, green: 0.662745098, blue: 0.9568627451, alpha: 1)
            case "BaseD1":     return #colorLiteral(red: 0.003921568627, green: 0.3411764706, blue: 0.6078431373, alpha: 1)
            case "BaseD1A080": return #colorLiteral(red: 0.003921568627, green: 0.3411764706, blue: 0.6078431373, alpha: 0.8)
            case "BaseD2":     return #colorLiteral(red: 0.007843137719, green: 0.5333333611, blue: 0.8196078539, alpha: 1)
            case "BaseL1":     return #colorLiteral(red: 0.8823529412, green: 0.9607843137, blue: 0.9960784314, alpha: 1)
            case "BaseL2":     return #colorLiteral(red: 0.5058823529, green: 0.831372549, blue: 0.9803921569, alpha: 1)
            case "Overlay":    return #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.5)
            case "FontD1":     return #colorLiteral(red: 0.2588235294, green: 0.2588235294, blue: 0.2588235294, alpha: 1)
            case "FontD2":     return #colorLiteral(red: 0.4588235319, green: 0.4588235319, blue: 0.4588235319, alpha: 1)
            case "FontL1":     return #colorLiteral(red: 0.9333333373, green: 0.9333333373, blue: 0.9333333373, alpha: 1)
            case "FontL2":     return #colorLiteral(red: 0.741176486, green: 0.741176486, blue: 0.741176486, alpha: 1)
            default: return UIColor.clear
            }
        }
    }
}

使うときは、

Storyboard

スクリーンショット 2017-08-02 19.22.35.png

コード

UIColor.Init(named: "FontD1")

iOS10をサポート対象外にするときは下記の一括置換とextensionのInit関数を削除

UIColor.Init(named: 

UIColor.init(named:

まだiOS10をサポート対象外にできないので、一旦はこんな感じで実装。
Storyboardで定義できるのは助かる。
xcassetsの色を変えたらStoryboardもコードで記載した部分も変わるのは嬉しい。
※iOS10をサポートしてる場合は、extensionのInitのiOS10の定義の修正も必要ですけど…

追記@20170808

ビルドは通るけど、Color Setを指定しているStoryboardではクラッシュを起こすようです。
iOS11になるまで利用しない方がいいかもしれません。。。
m( _ _ )m

利用するなら、この辺りの対応が必要かと。。。
http://blog.kishikawakatsumi.com/entry/2015/08/17/085902

UIColorと同じ感じでUIStoryboardにも処理追加。
無事動作確認完了!

///
// MARK: ------------------------------ extension UIStoryboard
///
/// extension UIStoryboard
///
extension UIStoryboard {
    ///
    // MARK: ------------------------------ static method
    ///
    /// UIColor.init(named: String)がiOS11以降からしか使えないのでiOS10用処理
    ///
    static func IOS10(name: String, bundle: Bundle?) -> UIStoryboard {
        if #available(iOS 11.0, *) {
            return UIStoryboard(name: name, bundle: bundle)
        } else {
            return UIStoryboard(name: "\(name)iOS10", bundle: bundle)
        }
    }
}

呼び出し側

let sb: UIStoryboard = UIStoryboard.IOS10(name: "StoryboardName", bundle: nil)
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?