[iOS]iOS11以降の色の定義方法(設計提案)
iOS11からAssetsに色が定義できるように成りました
https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW904
説明は皆様がわかりやすくされてるので割愛します
本題 コードから利用する
デフォでも十分シンプルです
UIColor(named:"keyColor")
しかしこうするととても気持ちいいです
enum Theme: String {
case keyColor = "keyColor"
case subKeyColor = "subKeyColor"
var color:UIColor {
return UIColor(named: self.rawValue)!
}
var cgColor:CGColor {
return color.cgColor
}
}
// 利用
func hoge() {
backgroundColor = Theme.keyColor.color
layer.borderColor = Theme.subKeyColor.cgColor
}
typoも怖くないです
切り替えも簡単そうです
所感
以前からこう書きたかった☺️
(以下追記)
別のアイディア(UIColorのextension)
こういう書き方もできそうですが、こっちの方が良いですかね?
extension UIColor {
static var keyColor = UIColor(named: "keyColor")!
static var subKeyColor = UIColor(named: "subKeyColor")!
}
// 利用
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.keyColor
view.backgroundColor = .keyColor
view.layer.backgroundColor = UIColor.subKeyColor.cgColor
}
別のアイディア(階層化して整理しやすくする)
「UITableViewのデフォルトのbackgroundColor」とかを定義したい場合
enum Theme: String {
case keyColor = "keyColor"
case subKeyColor = "subKeyColor"
enum TableView: String {
case backgroundColor = "tableView.background"
}
}
fileprivate extension RawRepresentable where RawValue == String {
var color:UIColor {
return UIColor(named: self.rawValue)!
}
var cgColor:CGColor {
return color.cgColor
}
}
// 利用側
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = Theme.TableView.backgroundColor.color
view.layer.backgroundColor = Theme.TableView.backgroundColor.cgColor
}
複合させてみる
ちょっとやり過ぎな感じがありますが
extension UIColor {
static var keyColor = Theme.keyColor
static var subKeyColor = Theme.subKeyColor
}
動的にアプリ全体の色テーマが変わるようなアプリなら有効かな? と思いましたが、そもそもその場合はColorSetの恩恵がほとんどないですね
追記:ColorLiteral
そういえばColorLiteralってありましたね
何故か使ってません
参考
https://medium.com/swift-column/color-literal-6223850f7e2c
Author And Source
この問題について([iOS]iOS11以降の色の定義方法(設計提案)), 我々は、より多くの情報をここで見つけました https://qiita.com/netetahito/items/483dfc7815179f70626a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .