【Xcode/Swift】簡単なルーレットアプリを作ってみる

Storyboard

画像は好きなものを3枚テキトーに入れておく

コーディング

import UIKit

class HomeViewController: UIViewController {

    // MARK: - Properties
    @IBOutlet private weak var rouletteLabel: UILabel!
    @IBOutlet private weak var rouletteImageView: UIImageView!
    @IBOutlet private weak var rouletteButton: UIButton!

    private var timer: Timer!
    private var changeImageNo = 0
    private let imageNameArray = ["smile", "cry", "surprised"]

    // MARK: - View Life Cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        setupView()
    }

    // ボタンを角丸にする & デフォルトで表示する画像を入れる
    private func setupView() {
        rouletteButton.layer.cornerRadius = 12
        rouletteImageView.image = UIImage(named: imageNameArray[0])
    }

    // 画像表示
    private func displayImage() {
        let imageName = imageNameArray[changeImageNo]
        rouletteImageView.image = UIImage(named: imageName)
    }

    // 0.1秒毎にchangeImageNoをインクリメントして表示する画像を変える
    @objc func updateTimer(_ timer: Timer) {
        changeImageNo += 1
        if changeImageNo > 2 {
            changeImageNo = 0
        }
        displayImage()
    }

    // ボタン処理、再生 & ストップを制御
    @IBAction func rouletteAction(_ sender: Any) {
        // 停止状態なら再生できるようにする
        if timer == nil {
            timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateTimer(_:)), userInfo: nil, repeats: true)
            rouletteButton.setTitle("ストップ", for: .normal)
            rouletteLabel.text = "再生中です"
        } else {
            // 再生中なら停止できるようにする
            timer.invalidate()
            timer = nil
            rouletteButton.setTitle("再生", for: .normal)
            rouletteLabel.text = "ルーレット停止しました"
        }
    }

}