【发布时间】:2017-03-29 01:19:50
【问题描述】:
我有两个 UIViewController,每个都有一个UISlider。一个滑块跟踪从AVPlayer 播放的音频文件的进度,另一个视图控制器滑块跟踪从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)
}
【问题讨论】:
-
你是如何触发你的两个 trackAudio 方法的?带定时器?如果是,它们是否设置了相同的间隔?
-
@DuncanC 我使用
CADisplayLink。用代码更新答案。 -
刚刚想通了。所以这个视图控制器有两个用途:记录和播放。录制先于播放并涉及使用
CADisplayLink的动画。一旦录音停止并播放录音,我将再次使用CADisplayLink来更新滑块。我从录制动画中删除了 CADisplayLink,滑块工作得很好。现在我必须弄清楚如何让他们一起工作。