2010-02-24 14 views

Respuesta

16

lo he descubierto y que no era demasiado malo.

Sólo actualizarlo en un temporizador

playbackTimer=[NSTimer scheduledTimerWithTimeInterval:0.5 
            target:self 
               selector:@selector(myMethod:) 
            userInfo:nil 
            repeats:YES]; 

} 


-(void)myMethod:(NSTimer*)timer { 

    float total=audioPlayer.duration; 
    float f=audioPlayer.currentTime/total; 

    NSString *str = [NSString stringWithFormat:@"%f", f]; 

    playbackProgress.progress=f; 

    NSLog(str); 
} 
0

Añadir un observador de tiempo periódico y actualizar el deslizador - en Swift será como esto -

func addPlayBackSlider() 
    { 
    playbackSlider = UISlider(frame:CGRect(x:10, y:300, width:300, height:20)) 
    playbackSlider?.minimumValue = 0 
    let duration : CMTime = playerItem.asset.duration 
    let seconds : Float64 = CMTimeGetSeconds(duration) 
    playbackSlider?.maximumValue = Float(seconds) 
    playbackSlider?.isContinuous = true 

    //If you want to manually set progressBar 
    playbackSlider?.addTarget(self, action: #selector(AddAudioController.playbackSliderValueChanged(_:)), for: .valueChanged) 

    //Here is the Observer 
    player!.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main) { (CMTime) -> Void in 
     if self.player!.currentItem?.status == .readyToPlay { 
      let time : Float64 = CMTimeGetSeconds(self.player!.currentTime()); 
      self.playbackSlider!.value = Float (time); 
     } 
    } 
    } 

    //If you want to manually set progressBar 
    func playbackSliderValueChanged(_ playbackSlider:UISlider) 
    { 
    let seconds : Int64 = Int64(playbackSlider.value) 
    targetTime = CMTimeMake(seconds, 1) 
    print(targetTime) 

    player!.seek(to: targetTime) 

    if player!.rate == 0 
    { 
     player?.play() 
     playButton!.setTitle("Pause", for: UIControlState.normal) 
    } 
} 
+0

Espero que esto ayude :) – Shawon91

+0

Adición de una el observador de tiempo periódico desafortunadamente solo funciona para AVPlayer, no para AVAudioPlayer. –

Cuestiones relacionadas