Swift 音乐播放器定时器
我正在创建一个音乐播放器,一切正常,但当我试图让持续时间计时器计数或滑块设置动画时,它崩溃了。它可以正常工作2秒钟,但随后崩溃。我在viewDidLoad中调用此方法。除了我上面指出的一条绿线之外,没有任何错误。我认为durationOutlet有问题 因此,请确保durationOutlet从情节提要正确连接Swift 音乐播放器定时器,swift,uislider,audio-player,Swift,Uislider,Audio Player,我正在创建一个音乐播放器,一切正常,但当我试图让持续时间计时器计数或滑块设置动画时,它崩溃了。它可以正常工作2秒钟,但随后崩溃。我在viewDidLoad中调用此方法。除了我上面指出的一条绿线之外,没有任何错误。我认为durationOutlet有问题 因此,请确保durationOutlet从情节提要正确连接 是示例项目以获取更多信息。它在您将time.value(即CMTimeValue,即Int64转换为Int)转换为time.value时会被压碎。它仅在您使用32位设备时才会被压碎。所以
是示例项目以获取更多信息。它在您将time.value(即CMTimeValue,即Int64转换为Int)转换为time.value时会被压碎。它仅在您使用32位设备时才会被压碎。所以我用Int64代替Int,它对我有效。不过,我还是不知道为什么它会起作用。所以我建议你试试这样: 让timeNow=Int64time.value/Int64time.timescale
如果不看玩家是如何设置的,很难判断。我不相信你能用AVAudioPlayer在远程服务器上传输文件。为此,您必须使用AVPlayer。您可能需要添加一些日志记录,以打印出现在的时间,以查看它在中断时的值。如果您使用的是AVPlayer,则需要检查AVPlayerItem的状态是否为ReadyToPlay。试着这样做:
func configurePlayer() {
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in
var timeNow = Int(self.player.currentTime().value) / Int(self.player.currentTime().timescale)
var currentMins = timeNow / 60
var currentSec = timeNow % 60
var duration: NSString = "\(currentMins):\(currentSec)"
self.durationOutlet.text = duration // <<- Green line here
self.sliderOutlet.value = Float(timeNow)
}
}
以下是swift中的一个代码,用于在玩家处于播放模式时更新滑块
你确定球员和球员准备好比赛了吗?
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in
if self.player.currentItem?.status == .ReadyToPlay {
var timeNow = Int(self.player.currentTime().value) / Int(self.player.currentTime().timescale)
var currentMins = timeNow / 60
var currentSec = timeNow % 60
var duration: NSString = "\(currentMins):\(currentSec)"
self.durationOutlet.text = duration // <<- Green line here
self.sliderOutlet.value = Float(timeNow)
}
}
player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in
if self.player.currentItem?.status == .ReadyToPlay {
let thePlayerItem : AVPlayerItem = self.player.currentItem!
let duration : Float64 = CMTimeGetSeconds(thePlayerItem.duration);
let time : Float64 = CMTimeGetSeconds(self.player.currentTime());
self.sliderVideoPlayer.value = Float (time / duration);
}
}