행을 선택하면 다음 코드는 특정 날짜 (이 경우 1 초 간격으로 재생되는 50 명의 플레이어)에서 재생할 AVAudioPlayer
집합을 설정합니다). 다시 터치 할 때 전체 프로세스가 다시 시작되기를 원하기 때문에 for 루프에서 설정을 중단해야합니다. 플레이어를 설정하는 데 몇 초가 걸리기 때문입니다.for 루프에서 playAtTime()을 사용하여 여러 AVAudioPlayers 설정 중지
이외에도 각 플레이어는 audioDidFinishPlaying
대리자 방법 AVAudioPlayerDelegate
을 사용하여 재생을 마친 후에 제거됩니다. 질문과 관련이 없으므로 코드에이 내용을 포함시키지 않았습니다.
for 루프에서 플래그를 사용하여 설정을 허용했는지 확인했지만 작동하지 않습니다.
var players: [AVAudioPlayer] = []
var loadError: NSError?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Removes the players that have been setup already.
players.removeAll()
// The for loop from the previous row selection should be stopped here.
for i in 0..<50 {
do {
let player = try AVAudioPlayer(contentsOfURL: soundUrls[i])
players += [player]
// The process of setting these up takes a few seconds, I need to break it.
print("Firing timer")
player.playAtTime(player.deviceCurrentTime + NSTimeInterval(i))
} catch let error as NSError {
loadError = error
}
}
}
이전 행 선택에 의해 트리거 된 설정은 완료 될 때까지 계속 진행되고 새로운 for 루프가 시작될 때까지 계속됩니다. 이전에 해독해야합니다.
어떻게 해결할 수 있는지 알 수 없습니다. 어쩌면 주 스레드에서 프로세스를 제거하여 (어떻게?)? 도움이 많이 감사!
루프가 중단됩니다려고하는 경우에 그런데
는 soundUrls (50)이있는 경우 0 ... 50의 항목이 51 번 실행됩니다. – ergoon
수정 해 주셔서 고맙습니다. 텍스트 필드에서이 예제 코드를 만들 때 수정 한 것입니다. 수정했습니다. 아직도 대답을 찾고 있습니다! – nontomatic