Ios 乌斯利德进展不顺利

Ios 乌斯利德进展不顺利,ios,swift3,uislider,Ios,Swift3,Uislider,我有两个UIViewController,每个都有一个UISlider。一个滑块跟踪从AVAudioPlayer播放音频文件的进度,另一个viewcontroller滑块跟踪从AVAudioPlayer播放音频文件的进度。响应AVPlayer的滑块动画非常平滑,而响应AVAudioPlayer的滑块动画不平滑。滑块的设置完全相同,除了我如何获得每个播放器的当前时间,如下所示: //AVPlayer slider func trackAudio() { let currentTime =

我有两个UIViewController,每个都有一个
UISlider
。一个滑块跟踪从
AVAudioPlayer
播放音频文件的进度,另一个viewcontroller滑块跟踪从
AVAudioPlayer
播放音频文件的进度。响应
AVPlayer
的滑块动画非常平滑,而响应
AVAudioPlayer
的滑块动画不平滑。滑块的设置完全相同,除了我如何获得每个播放器的当前时间,如下所示:

//AVPlayer slider

func trackAudio() {
    let currentTime = self.newPlayer!.currentTime()
    let currentTimeInSeconds = CMTimeGetSeconds(currentTime)
    slider.setValue(Float(currentTimeInSeconds), animated: true)
}        


//AVAudioPlayer Slider

func trackAudio() {
    let currentTime = self.player!.currentTime
    slider.setValue(Float(currentTime), animated: true)
}

func playPressed(){

    player!.play()
    updater = CADisplayLink(target: self, selector: #selector(RecordController.trackAudio))
    updater.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

非平滑UISlider的原因是,我在同一个视图控制器中有两个CADisplayLink

我最初有以下几点:

var displayLink: CADisplayLink?  // for recording animation
var updater: CADisplayLink?      // for updating slider


func record() {
     let displayLink = CADisplayLink(target: self, selector:#selector(RecordController.updateMeters))
     displayLink.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

func play() {
    let updater = CADisplayLink(target: self, selector: #selector(RecordController.trackAudio))
    updater.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}
我通过以下方式实现了这一目标:

func record() {
     self.displayLink = CADisplayLink(target: self, selector:#selector(RecordController.updateMeters))
     self.displayLink.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

func play() {
    self.displayLink = CADisplayLink(target: self, selector: #selector(RecordController.trackAudio))
    self.displayLink.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

非平滑UISlider的原因是,我在同一个视图控制器中有两个CADisplayLink

我最初有以下几点:

var displayLink: CADisplayLink?  // for recording animation
var updater: CADisplayLink?      // for updating slider


func record() {
     let displayLink = CADisplayLink(target: self, selector:#selector(RecordController.updateMeters))
     displayLink.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

func play() {
    let updater = CADisplayLink(target: self, selector: #selector(RecordController.trackAudio))
    updater.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}
我通过以下方式实现了这一目标:

func record() {
     self.displayLink = CADisplayLink(target: self, selector:#selector(RecordController.updateMeters))
     self.displayLink.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

func play() {
    self.displayLink = CADisplayLink(target: self, selector: #selector(RecordController.trackAudio))
    self.displayLink.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
}

您是如何触发两种trackAudio方法的?有计时器吗?如果是这样,它们的设置间隔是否相同?@duncac我使用
CADisplayLink
。用密码更新了答案,刚刚搞定。所以这个视图控制器有两个用途:录制和播放。录制在播放之前,并涉及使用
CADisplayLink
的动画。一旦录音停止并播放录音,我将再次使用
CADisplayLink
更新滑块。我从录制动画中删除了CADisplayLink,滑块工作得非常完美。现在我必须弄清楚如何让它们一起工作。你是如何触发你的两个trackAudio方法的?有计时器吗?如果是这样,它们的设置间隔是否相同?@duncac我使用
CADisplayLink
。用密码更新了答案,刚刚搞定。所以这个视图控制器有两个用途:录制和播放。录制在播放之前,并涉及使用
CADisplayLink
的动画。一旦录音停止并播放录音,我将再次使用
CADisplayLink
更新滑块。我从录制动画中删除了CADisplayLink,滑块工作得非常完美。现在我必须想办法让他们一起工作。