2016-12-17 14 views
0

私はフルスクリーンセルを表示するコレクションビューを持っています。また、セルが自動的に1つずつスクロールします。スクロールが発生すると、オーディオファイルの再生はセルのインデックス番号に依存します。この部分に問題はありません。しかし、私の問題は、私は戻るボタンがあり、ユーザーがそれをタップすると、メインビューコントローラーに行くことです。そして、この戻るボタンには巻き戻しがあります。私が戻るボタンをタップすると、私はメインビューのコントローラに行きますが、コレクションビューのセルスクロールが何度も何度も何度も繰り返しているときに再生されるオーディオファイルです。巻き戻しのセグとオーディオの再生を続ける

私はこれを試してみましたが、それは

@IBAction func backBtnPressed(_ sender: UIButton) { 
     if audioPlayer1.isPlaying == true { 
     audioPlayer1.stop() 
    } 

が動作していないと私はこれは、一部は次のセルにスクロールし、自動的に処理されviewDidLoad()

override func viewDidLoad() { 
      startTimer() 
     } 

内のすべてのものを呼び出しています。私はalphabetSoundPlay()関数をここに呼び出しています。私はunwind()機能が割り当てを解除しないと思います。これは、関数である

func startTimer() { 

     _ = Timer.scheduledTimer(timeInterval: 3.0, 
     target: self, 
     selector: #selector(scrollToNextCell), 
     userInfo: nil, 
     repeats: true) 
    } 

をスクロールするための

func scrollToNextCell(){ 

      let cellSize = CGSize(width: self.view.frame.width, height: self.view.frame.height) 
      let contentOffset = myCollectionView.contentOffset 
      myCollectionView.scrollRectToVisible(CGRect(x: contentOffset.x + cellSize.width, y: contentOffset.y, width: cellSize.width, height: cellSize.height), animated: true) 
      alphabetSoundPlay() 
      } 

3秒の遅延はそれがどのセル割り出し、どのオーディオファイルが

func alphabetSoundPlay() { 

     let currentRow = self.myCollectionView.indexPath(for: self.myCollectionView.visibleCells[0])?.row 

     if currentRow == 0 { 
      do 
      { 
       audioPlayer1 = try AVAudioPlayer(contentsOf:alphabetSound1!, fileTypeHint:nil) 
      } 
      catch 
      { 
       return print("file not found") 
      } 
      audioPlayer1.prepareToPlay() 
      audioPlayer1.play() 
     } else if currentRow == 1 { 
      do 
      { 
       audioPlayer2 = try AVAudioPlayer(contentsOf:alphabetSound2!, fileTypeHint:nil) 
      } 
      catch 
      { 
       return print("file not found") 
      } 
      audioPlayer2.prepareToPlay() 
      audioPlayer2.play() 
     }else if currentRow == 2 { 
      do 
      { 
       audioPlayer3 = try AVAudioPlayer(contentsOf:alphabetSound3!, fileTypeHint:nil) 
      } 
      catch 
      { 
       return print("file not found") 
      } 
      audioPlayer3.prepareToPlay() 
      audioPlayer3.play() 
     }else if currentRow == 3 { 
      do 
      { 
       audioPlayer4 = try AVAudioPlayer(contentsOf:alphabetSound4!, fileTypeHint:nil) 
      } 
      catch 
      { 
       return print("file not found") 
      } 
      audioPlayer4.prepareToPlay() 
      audioPlayer4.play() 
     } 

答えて

0

を再生しますあなたのviewControllerインスタンス。技術的にはviewControllerインスタンスにはもうアクセスできませんが、メモリインスタンスはメモリ上にとどまり、AudioPlayerは再生を続けます。

self.dismiss(animated: true, completion: { 
    [unowned self]() -> Swift.Void in 
    self.yourPlayer.stop(); 
    self.yourPlayer = nil; 
}) 

を使用してみてくださいまたは停止し、あなたのunwind()セグエ関数内でごaudioPlayersの割り当てを解除します。

0

はprepareForSegue方法で

if audioPlayer1.isPlaying == true { 
    audioPlayer1.stop() 

をこれらの行を使用し、また、あなたが現在再生中のオーディオプレーヤーの同じインスタンス上のstop()メソッドを呼び出していることを確認してください。

関連する問題