はじめに
アドベントカレンダー一個一個の質が低いのは許してください。
今回作るもの
下のような感じのタイマーです。
ただ単に400秒とか600秒とか10秒といった秒数からカウントを減らしていく記事は結構あったんですが下の画像のように、時間、分、秒まで対応した記事はぱっと見なかったので(多分ある)
記事書くことにしました。
今回ライブラリとか何も使っていないのですがそういうタイマーのライブラリとかあるんですかね。
storyboard
画像にも記載してありますがLabelを一つおくだけでいいです。
画像上にあるnavigationBarとか下の二つのラベルとか青い四角とか全部いらないです。
分かりにくくてすみません。
まとめるとLabelを一つだけ配置しましょう
viewController
viewController
//timerの時間(1時間,10分,10秒)
var time: [Int] = [1,10,10]
//さっき作ったlabelを紐づける
@IBOutlet weak var timeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//labelの表示を初期化
timeLabel.text = String(time[0]) + ":" + String(time[1]) + ":" + String(time[2])
//1秒ごとに時間をtimerメソッドを呼び出す。
Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(timer) , userInfo: nil, repeats: true)
}
@objc func timer(){
if (time[0] == 0 && time[1] == 0 && time[2] == 0) {
timeLabel.text = "終了"
} else {
if time[2] > 0 {
//秒数が0以上の時秒数を-1
time[2] -= 1
} else {
//秒数が0の時
time[2] += 59
if time[1] > 0 {
//分が0以上の時、分を-1
time[1] -= 1
} else {
//分が0の時、+59分、時間-1
time[1] += 59
time[0] -= 1
}
}
timeLabel.text = String(time[0]) + ":" + String(time[1]) + ":" + String(time[2])
}
}
終わりに
解説はコメントに書いてある通りなんですがなんかネストしすぎてて見にくいので自分でするときはリファクタしてください。