2017-03-27 10 views
0

私はAVAudioPlayerを持っています。最初のセッション(ユーザーがオーディオを一時停止するとき)で、オーディオトラックの経過時間と時間を保存します。そして、次のセッションで(iBooksアプリのように)保存された時間を再生し始めます。これを行う最善の方法は何ですか?オーディオ時間を保存するには?

ラベル

@IBOutlet var timeElapsed: UILabel! 
@IBOutlet var timeDuration: UILabel! 

@IBAction func play(sender: AnyObject) { 
    if !audioPlayer.isPlaying{ 
     audioPlayer.play() 
     slider.maximumValue = Float(audioPlayer.duration) 
     slider.value = 0.0 
     timer = Timer(timeInterval: 0.0, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true) 
     RunLoop.main.add(timer!, forMode: .commonModes) 
} 

func updateTime() { 

    let currentTime = Int(audioPlayer.currentTime) 
    let minutes = currentTime/60 
    let seconds = currentTime - minutes * 60 

    let durationTime = Int(audioPlayer.duration) - Int(audioPlayer.currentTime) 
    let minutes1 = durationTime/60 
    let seconds1 = durationTime - minutes1 * 60 
    timeElapsed.text = NSString(format: "%02d:%02d", minutes,seconds) as String 
    timeDuration.text = NSString(format: "-%02d:%02d", minutes1,seconds1) as String 
} 

答えて

0

NSUserDefaultsを使用すると、複数のアプリを起動して情報を保存できます。

すると、以下のようにあなたがNSUserDefaultsに経過時間とAudioSessionの継続時間を節約することができますユーザクリック一時停止ボタン:

func pauseClick() 
{ 
    if audioPlayer.isPlaying 
    { 
    UserDefaults.standard.set(player.currentTime, forKey: "ElapsedDuration") 
    UserDefaults.standard.set(player.duration, forKey: "TotalDuration") 
    UserDefaults.standard.synchronize() 
    audioPlayer.pause(); 
    } 
} 

あなたは次のセッションだけでこれらのメソッドを呼び出すことにより、userDefaultsから情報をフェッチを開始するたびに。

func setUpNewAudioPlayer() 
{ 
     let player:AVAudioPlayer = AVAudioPlayer() 
     //before setting current time, make sure you set URL for player 
     player.currentTime = self.getElapsedDuration() 
} 

func getTotalDuration() -> (TimeInterval) 
{ 
    let timeInterval = UserDefaults.standard.value(forKey: "TotalDuration") 
    return timeInterval != nil ? timeInterval as! TimeInterval : 0 
} 

func getElapsedDuration() -> (TimeInterval) 
{ 
    let timeInterval = UserDefaults.standard.value(forKey: "ElapsedDuration") 
    return timeInterval != nil ? timeInterval as! TimeInterval : 0 
} 

これは機能します。

+0

問題を解決するには、オプション値をアンラッピングしている間に '予期せぬことにnilが見つかりました。 –

+0

私は上記の最新のコードで確認した –

-1

で時間を表示する私のコードは、NSUserDefaultsのドキュメントを見てください。

NSUserDefaults

私はそれはあなたが辞書に現在の時間を節約するための最良の方法だと思います。

+0

この方法はiBooksで使用されていますか? –

+0

本当に知りません。しかし、UserDefaultsでは、アプリケーション用に予約されたデバイスメモリ内の情報を保持することができます。だから私はそれがあなたの場合のための最良の選択だと思う。 このチュートリアルを見てくださいhttps://videos.raywenderlich.com/courses/saving-data-in-ios/lessons/6 –

関連する問題