2016-05-25 14 views
0

ここでは、関数を記述しようとしています。 1. AVAudioPlayerが再生されていない場合、NSURLの配列が順番に再生されます。 2.再生中は、同じボタンが再生を一時停止します。Swift 2.2単一再生/一時停止UIButton

私のコードが正常に1ではなく2を行います。

lazy var isPlaying = Bool() 
lazy var isPaused = Bool() 
//... 
@IBAction func e1Play() { 
self.e1delegate = nil 

    //Start 
     if ePlaylist.count > 0 && eCurrentTrack < ePlaylist.count{ 
      do{ 
       try ePlayer = AVAudioPlayer(contentsOfURL: ePlaylist[eCurrentTrack]) 
      } catch { 
       print("ePlayer not available") 
      } 
      ePlayer?.prepareToPlay() 
      refreshlabel() 
      isPlaying = true 
      isPaused = false 
      e1PlayBtn!.setImage(UIImage(named: "pause-icon.png"), forState: UIControlState.Normal) 
      ePlayer!.delegate = self 
      ePlayer!.play() 
     } 

    //Pause 
    if isPlaying == true && isPaused == false { 
     ePlayer!.pause() 
     isPlaying = false 
     isPaused = true 
     e1PlayBtn!.setImage(UIImage(named: "play-icon.png"), forState: UIControlState.Normal) 
     isPlaying = false 
     } 
    //Resume 
    if isPlaying == false && isPaused == true { 
     ePlayer?.prepareToPlay() 
     ePlayer!.delegate = self 
     e1PlayBtn!.setImage(UIImage(named: "pause-icon.png"), forState: UIControlState.Normal) 
     isPlaying = true 
     isPaused = false 
     ePlayer!.play() 
    } 
} 

func refreshlabel() { 
    let index = eTestarray![eCurrentTrack] 
    let description = eDescriptions[index] 
    currentlyplaying!.text = "Currently Playing: \n\(description)" 
} 

func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool){ 
    self.e1delegate?.soundFinished(self) 
    let totaltracks:Int = ePlaylist.count - 1 
    if eCurrentTrack == totaltracks{ 
     eCurrentTrack = 0 
     currentlyplaying!.text = "Currently Playing: " 
     e1PlayBtn!.setImage(UIImage(named:"play-icon.png"), forState: UIControlState.Normal) 
    } 
    else{ 

    eCurrentTrack += 1 
    //If needed, add time delay here. 
    e1Play() 
    } 
} 


@IBAction func e1Next() { 
     if eCurrentTrack+1 > ePlaylist.count { 
      eCurrentTrack = 0 
      refreshlabel() 
     } else { 
      eCurrentTrack+1; 
      refreshlabel() 
     } 
} 

@IBAction func e1Previous(){ 
    if eCurrentTrack-1 < 0 { 
     eCurrentTrack = (ePlaylist.count - 1) < 0 ? 0 : (ePlaylist.count - 1) 
     refreshlabel() 
    } else { 
     eCurrentTrack-1 
     refreshlabel() 
     } 
} 

ないどこが間違っつもりだあまりにも確認してください - 何かアドバイスをいただければ幸いです。

+0

トグルボタンが組み込まれているため、このうち99%を実行する必要がありません。 – Alexander

答えて

0

は、次に、ボタンのコールバックを変更する必要があります。

@IBAction func e1Play() { 
    self.e1delegate = nil 

    //Start 
    if isPlaying == false && isPaused == false { 
     if ePlaylist.count > 0 && eCurrentTrack < ePlaylist.count{ 
      do{ 
       try ePlayer = AVAudioPlayer(contentsOfURL: ePlaylist[eCurrentTrack]) 
      } catch { 
       print("ePlayer not available") 
      } 
      ePlayer?.prepareToPlay() 
      refreshlabel() 
      isPlaying = true 
      isPaused = false 
      e1PlayBtn!.setImage(UIImage(named: "pause-icon.png"), forState: UIControlState.Normal) 
      ePlayer!.delegate = self 
      ePlayer!.play() 
     } 
    } 

    //Pause 
    else if isPlaying == true && isPaused == false { 
     ePlayer!.pause() 
     isPlaying = false 
     isPaused = true 
     e1PlayBtn!.setImage(UIImage(named: "play-icon.png"), forState: UIControlState.Normal) 
     isPlaying = false 
     } 
    //Resume 
    else if isPlaying == false && isPaused == true { 
     ePlayer?.prepareToPlay() 
     ePlayer!.delegate = self 
     e1PlayBtn!.setImage(UIImage(named: "pause-icon.png"), forState: UIControlState.Normal) 
     isPlaying = true 
     isPaused = false 
     ePlayer!.play() 
    } 
} 

は特に、代わりにifelse if注意してください。この方法では、既に再生中の場合、ボタンは再生を開始しません。

関連する問題