Ios 乌斯利德进展不顺利
我有两个UIViewController,每个都有一个Ios 乌斯利德进展不顺利,ios,swift3,uislider,Ios,Swift3,Uislider,我有两个UIViewController,每个都有一个UISlider。一个滑块跟踪从AVAudioPlayer播放音频文件的进度,另一个viewcontroller滑块跟踪从AVAudioPlayer播放音频文件的进度。响应AVPlayer的滑块动画非常平滑,而响应AVAudioPlayer的滑块动画不平滑。滑块的设置完全相同,除了我如何获得每个播放器的当前时间,如下所示: //AVPlayer slider func trackAudio() { let currentTime =
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,滑块工作得非常完美。现在我必须想办法让他们一起工作。