2016-02-28 1 views
0

Dans mon application où j'utilise AVFoundation j'appelle la fonction showCurrentAudioProgress() en utilisant NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "showCurrentAudioProgress", userInfo: nil, repeats: true) en viewDidLoad. Je voudrais retourner ce genre de format 00:00:00 mais j'ai un gros problème avec ça. toute la fonction ressemble à ceci:Comment imprimer l'heure audio au format 00:00:00 en utilisant AVFundation

var musicPlayer = AVAudioPLayer() 

func showCurrentAudioProgress() { 
    self.totalTimeOfAudio = self.musicPlayer.duration 
    self.currentTimeOfAudio = self.musicPlayer.currentTime 

    let progressToShow = Float(self.currentTimeOfAudio)/Float(self.totalTimeOfAudio) 
    self.audioProgress.progress = progressToShow 

    var totalTime = self.musicPlayer.duration 
    totalTime -= self.currentTimeOfAudio 

    self.currentTimeTimer.text = "\(currentTimeOfAudio)" 
    self.AudioDurationTime.text = "\(totalTime)" 
} 

comment puis-je convertir le temps que je recive en utilisant AVAudioPlayer 00:00:00?

Répondre

4

Vous pouvez utiliser le style NSDateComponentsFormatter .Positional et zeroFormattingBehavior .pad pour afficher votre intervalle de temps comme suit:

extension NSTimeInterval { 
    struct DateComponents { 
     static let formatterPositional: NSDateComponentsFormatter = { 
      let formatter = NSDateComponentsFormatter() 
      formatter.allowedUnits = [.Hour,.Minute,.Second] 
      formatter.unitsStyle = .Positional 
      formatter.zeroFormattingBehavior = .Pad 
      return formatter 
     }() 
    } 
    var positionalTime: String { 
     return DateComponents.formatterPositional.stringFromTimeInterval(self) ?? "" 
    } 
} 

print(120.positionalTime) // 0:02:00 

Si vous souhaitez utiliser le format de chaîne initialiseur vous pouvez jeter un oeil à ce answer .

1

La solution la plus simple sera d'obtenir hours, minutes et seconds séparément et de combiner en une chaîne. Pour améliorer vous pouvez le mettre dans la catégorie Chaîne ou l'extension.

let totalTimeOfAudio = 26343 // number of seconds just for an example 

let secondsInMinute = 60 
let minuteInHour = 60 
let secondsInHour = secondsInMinute * minuteInHour 

let hours = Float(totalTimeOfAudio/(secondsInHour)) 
let minutes = Float(totalTimeOfAudio/minuteInHour % minuteInHour) 
let seconds = Float(totalTimeOfAudio % secondsInMinute) 

let string: NSString = NSString(format: "%02.f:%02.f:%02.f", hours, minutes, seconds) 
+0

quelque chose ne va pas dans 'minues' car il est toujours la même valeur même la minute suivante – PiterPan