背景や文字色を変更できるようにしてみた。iPhone編
こんにちは。iPhoneアプリ「断アルコール」内で表示されるメインビューの背景や文字色を、簡単なカラーピッカーを使用して変更できるようにしました。
以下のサイトを参考にしています。
Add a color picker to an iOS app
https://stackoverflow.com/questions/21981640/add-a-color-picker-to-an-ios-app
各スライドバーは、色数が70あるので、このようにしています。デフォルトは中央です。
import UIKit class ColorViewController: UIViewController { @IBOutlet weak var backColor: UIToolbar! @IBOutlet weak var stringEtc: UIBarButtonItem! @IBOutlet weak var stringDate: UIBarButtonItem! @IBOutlet weak var stringDays: UIBarButtonItem! @IBOutlet weak var sliderBack: UISlider! @IBOutlet weak var sliderDate: UISlider! @IBOutlet weak var sliderDays: UISlider! @IBOutlet weak var sliderEtc: UISlider! //背景色用のスライダー @IBAction func sliderBack(_ sender: UISlider) { backColor.barTintColor = Color.uiColorFromHex(rgbValue: getRGBInt(slider: sender)) } //日時の文字色用のスライダー @IBAction func slideDate(_ sender: UISlider) { stringDate.tintColor = Color.uiColorFromHex(rgbValue: getRGBInt(slider: sender)) } //日数の文字色用のスライダー @IBAction func slideDays(_ sender: UISlider) { stringDays.tintColor = Color.uiColorFromHex(rgbValue: getRGBInt(slider: sender)) } //その他の文字色用のスライダー @IBAction func slideEtc(_ sender: UISlider) { stringEtc.tintColor = Color.uiColorFromHex(rgbValue: getRGBInt(slider: sender)) } func getRGBInt(slider: UISlider) -> Int { let sliderValue = slider.value return Color.colorArray[Int(sliderValue)] } }
import UIKit class Color { static let colorArray = [ 0x000000, 0x262626, 0x4d4d4d, 0x666666, 0x808080, 0x990000, 0xcc0000, 0xfe0000, 0xff5757, 0xffabab, 0xffabab, 0xffa757, 0xff7900, 0xcc6100, 0x994900, 0x996f00, 0xcc9400, 0xffb900, 0xffd157, 0xffe8ab, 0xfff4ab, 0xffe957, 0xffde00, 0xccb200, 0x998500, 0x979900, 0xcacc00, 0xfcff00, 0xfdff57, 0xfeffab, 0xf0ffab, 0xe1ff57, 0xd2ff00, 0xa8cc00, 0x7e9900, 0x038001, 0x04a101, 0x05c001, 0x44bf41, 0x81bf80, 0x81c0b8, 0x41c0af, 0x00c0a7, 0x00a18c, 0x00806f, 0x040099, 0x0500cc, 0x0600ff, 0x5b57ff, 0xadabff, 0xd8abff, 0xb157ff, 0x6700bf, 0x5700a1, 0x450080, 0x630080, 0x7d00a1, 0x9500c0, 0xa341bf, 0xb180bf, 0xbf80b2, 0xbf41a6, 0xbf0199, 0xa10181, 0x800166, 0x999999, 0xb3b3b3, 0xcccccc, 0xe6e6e6, 0xffffff] static func uiColorFromHex(rgbValue: Int) -> UIColor { let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 0xFF let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 0xFF let blue = CGFloat(rgbValue & 0x0000FF) / 0xFF let alpha = CGFloat(1.0) return UIColor(red: red, green: green, blue: blue, alpha: alpha) } }
スライドバーを動かすと、連動して色が変わる部分のコードです。
スライドバーの値 = Color.colorArray 配列のインデックス
にしています。
今後の機能拡張(色数を増やすなど)を考えると、色自体の値(0xbf41a6など)を保存(UserDefaultsなど)しておくのがのが良いと思いますが、今回は描画の時にだけ色の値を取り出して使用しています。
今日はここまでです。