【Swift】曲の再生時間と総時間をhh:mm:ssの表記でラベルに表示する方法


【Swift】ボタンをタップすると曲が再生され、且つ、ボタンタイトルが変わる方法」の続きです。NSTimerを使って、曲の再生時間と総時間をhh:mm:ssの表記でラベルに表示します。AVAudioPlayerの.currentTimeや.durationを使っています。

次回は、スライドバーを使って、再生箇所を自由に変更できるようにする予定です!

できるもの

スクリーンショット 2014-10-21 19.32.42
左側のラベルに曲の再生時間を、右側のラベルに曲の総時間を表示します。

ソフトのバージョン

OS: OSX Yosemite 10.10
Xcode: 6.1

つくりかた

動画でご確認ください。

コード


import UIKit
import AVFoundation

class ViewController: UIViewController {

var audioPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("test", ofType: "mp3")!)

var player = AVAudioPlayer()
var timer = NSTimer()

@IBOutlet weak var labelCurrentTime: UILabel!
@IBOutlet weak var labelTotalTime: UILabel!
@IBOutlet weak var btnPlayTitle: UIButton!

@IBAction func btnPlay(sender: UIButton) {
if !player.playing {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updatePlayingTime"), userInfo: nil, repeats: true)
player.play()
btnPlayTitle.setTitle("Pause", forState: UIControlState.Normal)
} else {
player.pause()
btnPlayTitle.setTitle("Play", forState: UIControlState.Normal)
}
}

func updatePlayingTime() {
labelCurrentTime.text = formatTimeString(player.currentTime)
}

func formatTimeString(d: Double) -> String {
let s: Int = Int(d % 60)
let m: Int = Int((d - Double(s)) / 60 % 60)
let h: Int = Int((d - Double(m) - Double(s)) / 3600 % 3600)
let str = String(format: "%02d:%02d:%02d", h, m, s)
return str
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
player = AVAudioPlayer(contentsOfURL: audioPath, error: nil)
player.prepareToPlay()
labelTotalTime.text = formatTimeString(player.duration)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です