前回記事
前回はタイマー処理の実装と、UIを大雑把に作成しました。
今回は時間が0になった時に音で知らせる機能の追加と、より使いやすいタイマーにするためにボタンの配置修正をします。
音を出す機能の追加 + 配置修正
音を出すこと考えて思いつくのは、システム音声を使うか、オリジナルのmp3などを読み込ませるかでした。
今回もなるべく楽をするために、システム音声を使うことにします。
以下のコードが音を出すために作った関数です。実装だけ見ると数行ですが、音に関連する知識はかなり広がってしますので、情報を探すのが難しいです。
import AudioToolbox //忘れずに追加
~~略~~
func playSound(){
let soundIdRing:SystemSoundID = 1016
AudioServicesPlaySystemSound(soundIdRing)
}
}
まず、FrameworkのAudioToolboxについてです。オーディオの録音や再生、フォーマット変換、オーディオセッションの設定など音関連の諸々に携わっています。
今回使いたいのは再生だけなので、情報を絞っていきます。
ぴったりなのが、関数のAudioServicesPlaySystemSound(_:)です。関数の役割はシステム音の再生です。
//定義
func AudioServicesPlaySystemSound(_ inSystemSoundID: SystemSoundID)
SystemSoundIDを設定するとIDに対応した音が鳴ります。
IDは公式のドキュメントを探しても見つからなかったので、GitHubの記事を参照しました。
システム音の再生だけですと、これだけで実装できます。
配置修正
最近mocriというポモドーロしながらトークができるアプリを使っているのですが、このアプリのタイマーのUIの方が今作っているUIより100%優れていたので、参考にさせてもらいました。
再生、停止、一時停止、切り替えと4つのボタンがあるのですが、全てを常時表示する必要はないんですよね。。。
再生中は再生と切り替えが不要で、停止中は停止と一時停止が不要です。
表示するボタンを切り替える様に実装し直しました。
今回は音関連の機能を実装しました。
次回は通知機能を実装予定です。