私はフルスクリーンセルを表示するコレクションビューを持っています。また、セルが自動的に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()
}