Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 音乐播放器定时器_Swift_Uislider_Audio Player - Fatal编程技术网

Swift 音乐播放器定时器

Swift 音乐播放器定时器,swift,uislider,audio-player,Swift,Uislider,Audio Player,我正在创建一个音乐播放器,一切正常,但当我试图让持续时间计时器计数或滑块设置动画时,它崩溃了。它可以正常工作2秒钟,但随后崩溃。我在viewDidLoad中调用此方法。除了我上面指出的一条绿线之外,没有任何错误。我认为durationOutlet有问题 因此,请确保durationOutlet从情节提要正确连接 是示例项目以获取更多信息。它在您将time.value(即CMTimeValue,即Int64转换为Int)转换为time.value时会被压碎。它仅在您使用32位设备时才会被压碎。所以

我正在创建一个音乐播放器,一切正常,但当我试图让持续时间计时器计数或滑块设置动画时,它崩溃了。它可以正常工作2秒钟,但随后崩溃。我在viewDidLoad中调用此方法。除了我上面指出的一条绿线之外,没有任何错误。

我认为durationOutlet有问题

因此,请确保durationOutlet从情节提要正确连接


是示例项目以获取更多信息。

它在您将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);
            }
        }