2017-01-20 1 views
0

오디오 파일의 길이를 표시하고 사용자가 앞뒤로 문질러 닦을 수 있도록 AVPlayer 용 슬라이더를 구현하려고합니다.Slider Scrubbing not so smooth

나는 거의 작동하고 있지만 슬라이더 손잡이를 움직이면 원래 위치로 잠시 되돌아 간 다음 앞으로 이동하여 다시 재생을 시작합니다.

이 깜박임을 중지 할 수있는 방법이 있습니까? 나는 아마 코드에 어리 석다. 내가 무효화하고 다시 함께 연주 그래서 내가 타이머를 사용하고 있지만 아무 짓도 안 했어요

@IBAction func horizontalSliderActioned(_ sender: Any) { 

    audioPlayer?.pause() 
     //self.timer?.invalidate() 

    //create a CMTime the slider value 
    let seconds : Int64 = Int64(horizontalSlider.value) 
     let preferredTimeScale : Int32 = 1 
      let seekTime : CMTime = CMTimeMake(seconds, preferredTimeScale) 
       audioPlayerItem?.seek(to: seekTime) 

    audioPlayer?.play() 
     //self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(PlayerViewController.audioSliderUpdate), userInfo: nil, repeats: true) 
} 

:

이 슬라이더 내 블록이다.

타이머 블록이다

self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(PlayerViewController.audioSliderUpdate), userInfo: nil, repeats: true) 

최대 시간은 오디오가 재생되는 경우 시간에서 설정한다 : 상기 오디오의 재생 개시 타이머에 의해 호출

func audioSliderUpdate() { 

    let currentTime : CMTime = (self.audioPlayerItem?.currentTime())! 
    let seconds : Float64 = CMTimeGetSeconds(currentTime) 
    let time : Float = Float(seconds) 

    self.horizontalSlider.value = time 


} 

let duration : CMTime = (self.audioPlayer?.currentItem!.asset.duration)! 
    let seconds : Float64 = CMTimeGetSeconds(duration) 
    let maxTime : Float = Float(seconds) 

    self.horizontalSlider.maximumValue = maxTime 

답변

0

슬라이더의 범위가 0을 할당하여 얻을 수있는 범위로 설정되지 않았다고 생각합니다. 그것에.

기본값은 다음과 같이 설정됩니다 : 당신이 아직 작성하지 않은 경우 enter image description here

당신은 ... 1 ... 0으로 재생 사운드의 길이를 설정하거나 상대적인 0의 시간을 입력해야 .

+0

오디오가 재생되는 최대 시간을 설정하고 있는데, 질문에 잘못 추가합니다. – Pippo