毎日少しでもさわって新しい機能をつけていこう、というコトで。
画面イメージ



ソース
サンプルとして上げるには
余計なロジックが多すぎるので、肝心な部分だけ。
ViewController.swift
func timerFiring() {
let timer = Timer(timeInterval: 0.2,
target: self,
selector: #selector(updateColor),
userInfo: nil,
repeats: true)
RunLoop.main.add(timer, forMode: .default)
}
func updateColor() {
//グラデーションの開始色(上下)
//タイマー処理でRGB値を少しずつ変化させてセット
let topColor = UIColor(red: tBgRed, green: tBgGreen, blue: tBgBlue, alpha: 1)
let bottomColor = UIColor(red: bBgRed, green: bBgGreen, blue: bBgBlue, alpha: 1)
//グラデーションの色を配列で管理
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
//グラデーションレイヤーを作成
gradientLayer?.removeFromSuperlayer()
gradientLayer = CAGradientLayer()
//グラデーションの色をレイヤーに割り当てる
gradientLayer!.colors = gradientColors
//グラデーションレイヤーをスクリーンサイズにする
gradientLayer!.frame = self.view.bounds
//グラデーションレイヤーをビューの一番下に配置
self.view.layer.insertSublayer(gradientLayer!, at: 0)
}
ポイント
ポイントとしては、gradientLayer?.removeFromSuperlayer()
を入れたこと。これを入れないと、updateColor()をtimerで繰り返し呼出し実行をしても最初にセットされた配色から更新されなかったです。
ちなみに配色に関しては、自分は上下のRGB値をそれぞれランダムなペースで0〜255の間を往復させるような処理として書いてます。
(現状そこは雑なロジックなので、キレイにまとめたら別の記事として投稿したい)
感想
机の上の充電スタンドに立てかけてたら、席の近くに来た人が「あれ、さっきと色違う・・・」みたいなアイキャッチになればいいかな、と。