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