LoginSignup
5
5

More than 3 years have passed since last update.

【swift】 時間経過で背景色のグラデーション変化 (自分専用アプリ開発その2)

Last updated at Posted at 2019-06-17

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

画面イメージ

スクリーンショット 2019-06-18 0.11.30.png
スクリーンショット 2019-06-18 0.11.52.png
スクリーンショット 2019-06-18 0.12.53.png

ソース

サンプルとして上げるには
余計なロジックが多すぎるので、肝心な部分だけ。

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の間を往復させるような処理として書いてます。
(現状そこは雑なロジックなので、キレイにまとめたら別の記事として投稿したい)

感想

机の上の充電スタンドに立てかけてたら、席の近くに来た人が「あれ、さっきと色違う・・・」みたいなアイキャッチになればいいかな、と。

5
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
5
5