2017-08-31 17 views
0

私は、フォアグラウンドとバックグラウンド(ロックされた画面)のオーディオファイルのリストを再生するオーディオアプリを持っています。バックグラウンドでオーディオプレイリストを再生するときに問題が発生しています。スウィフトは、オーディオ再生リストをバックグラウンドで再生します。

以下は、再生リストの1つ後のオーディオファイルを再生するためにループスルーする関数です。私はいつも私のcellForItemに問題があるようです。私はそれを展開しない場合、私は致命的なエラーを取得します。 if letステートメントに入れると、次の曲を再生するときに次の繰り返しでコードが実行されません。私はindexPathを失うことはありませんので、うまくいくはずです。私はそれを理解することはできません。

func playCellAudioInBackground(indexPath: IndexPath) { 
    if let item = cv.cellForItem(at: indexPath) as? CollectionViewCell { 

    let when = DispatchTime.now() + 3 // change 2 to desired number of seconds 
    DispatchQueue.main.asyncAfter(deadline: when) { 

     UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: ({ 
      self.gradient.removeFromSuperlayer() 
      item.superview?.bringSubview(toFront: item) 
      self.view.setNeedsLayout() 
      self.view.layoutIfNeeded() 

     }), completion: { (finished: Bool) in 
      let audioURL = self.streams[indexPath.item][“audioURL"] as? String 
      let isLive = self.streams[indexPath.item]["isLive"] as? Bool 
      self.audioStreamSelected(audioUrl: audioURL!, live:isLive!) { (success) -> Void in 
       DispatchQueue.main.async { 
         self.audioPlay() 
       } 
      } 
     }) 
    } 
    } 
} 

答えて

1

二つの重要な事柄:

  1. あなたが再生したり、メインスレッド内のストリームオーディオべきではありません。このスレッドは、短い操作に使用しますが、主にUIの更新に使用します。

  2. アプリケーションがフォアグラウンドからバックグラウンドに移動するときにオーディオを再生するには、バックグラウンドタスクを実行する必要があります。

チェックアウト、彼らは正確にあなたがおよそBackground Modesとどのようにバックグラウンドでオーディオを再生するために教えるthisきちんとチュートリアル。

こちらがお役に立てば幸いです。

関連する問題