Ios 如何使用AVFundation以00:00:00格式打印音频时间

Ios 如何使用AVFundation以00:00:00格式打印音频时间,ios,iphone,swift,time,avfoundation,Ios,Iphone,Swift,Time,Avfoundation,在我的应用程序中,我使用AVFoundation调用函数showCurrentAudioProgress()使用NSTimer.scheduledTimerWithTimeInterval(0.1,目标:self,选择器:“showCurrentAudioProgress”,userInfo:nil,repeats:true)在viewDidLoad中。我想返回这种时间格式00:00:00,但我有一个大问题。整个函数如下所示: var musicPlayer = AVAudioPLayer()

在我的应用程序中,我使用
AVFoundation
调用函数
showCurrentAudioProgress()
使用
NSTimer.scheduledTimerWithTimeInterval(0.1,目标:self,选择器:“showCurrentAudioProgress”,userInfo:nil,repeats:true)
viewDidLoad
中。我想返回这种时间格式00:00:00,但我有一个大问题。整个函数如下所示:

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)"  
}

如何将使用
AVAudioPlayer
获得的时间转换为00:00:00?

最简单的解决方案是分别获得
小时
分钟
,并合并为一个字符串。为了提高性能,您可以将其放入字符串类别或扩展名中

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)

最简单的解决方案是分别获得
小时
分钟
,并合并成一个字符串。为了提高性能,您可以将其放入字符串类别或扩展名中

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)

您可以使用NSDateComponentsFormatter.Positional样式和zeroFormattingBehavior.Pad按如下方式显示时间间隔:

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

如果你想使用字符串格式初始化器,你可以看看这个

您可以使用NSDateComponentsFormatter.Positional style和zeroFormattingBehavior.Pad显示时间间隔,如下所示:

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

如果你想使用字符串格式初始化器,你可以看看这个

minutes中出现错误是因为下一分钟它仍然是相同的值
minutes中出现错误是因为下一分钟它仍然是相同的值