【Swift UIKit】ストップウォッチタイマーの実装方法!Timerクラスの使い方

この記事からわかること
- SwiftのUIKitでストップウォッチでタイマーを実装する方法
- Timerクラスの使い方
- 時間や分、秒を表示させる方法
\ アプリをリリースしました /
環境
- Xcode:16.0
- iOS:18.0
- Swift:5.9
- macOS:Sonoma 14.6.1
今回はゲーム開発などに使いがちなタイマー機能(ストップウォッチ)をSwiftで実装する方法をまとめていきたいと思います。
Swiftでストップウォッチタイマーを作るには?

ポイント
- Timerクラス
- 経過時間の表示方法
タイマー機能を実装するためにはTimerクラスが重要になってきます。
実装の流れ
- StoryboardからUI部品(ラベルとボタン)を配置
- アウトレット変数を定義し紐付け
- Timerクラスでタイマー操作
今回はStoryboardを使用した場合で解説していきます。Swift UIでもストップウォッチのロジックは変わらないのでそのまま流用してみてください。
実装方法
StoryboardからUI部品(ラベルとボタン)を配置
Storyboardにタイマー表示用のUILabelとスタート/ストップ用のUIButtonを2つ配置しておきます。

アウトレット変数を定義し紐付け
続いてViewControllerクラスにIBOutlet
とIBAction
を定義しStoryboardのUIと紐付けをしておきます。
これで前準備は整いました。ここからタイマーのロジック部分に入っていきます。
Timerクラスでタイマー操作
まずは経過時間を保持するtime
プロパティとTimer
インスタンスを保持するtimer
プロパティを用意します。
続いてタイマーをスタートさせる処理を記述します。Timer.scheduledTimer
の使い方に関しては後述します。ここでは0.01秒ごとにtime
プロパティの値を0.01ずつ増やしています。
time
プロパティが保持するのは経過した秒数(ミリ秒も含む)のみなのでこれを時間や分数、秒数などに整形しておきます。
最後に動いているタイマーを一時停止させるためのボタン処理を記述します。
これでストップウォッチタイマーが完成しました。最後に全体のコードを載せておきます。
全体のコード
Timerクラス
Timerは指定した任意の時間経過後に任意の処理を実行できる機能を提供するクラスです。
そして肝となるのがscheduledTimer
メソッドです。
scheduledTimerメソッド
scheduledTimer
メソッドは同名の引数違いで3種類ほど用意されていますが今回使用しているのはscheduledTimer(withTimeInterval:repeats:block:)
になります。
3つの引数
- interval:タイマーの発火秒数
- repeats:指定秒数ごとに繰り返すかどうか
- block:発火ごとに繰り返したい処理
おすすめ記事:【Swift】completionHandlerとは?使い方と@escapingの意味
返り値として指定されたパラメータで構成されたTimerオブジェクトが返ります。
タイマーの停止:invalidateメソッド
動き出したタイマーを停止させるにはinvalidate
メソッドを実行します。このメソッドは実行されているTimerオブジェクトから呼び出す必要があるのでscheduledTimer
メソッドで帰ったオブジェクトから呼び出します。
経過時間の表示方法
今回は経過時間が秒単位(小数点含むDouble型)で保持されています。ユーザーの目には秒ではなく、時間や分数、秒数、ミリ秒数で表示させたいのでそれぞれ算出していきます。
それぞれの計算方法
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。