Мой совет - создать метод, который зацикливает ваш аудиоклип (любой продолжительности, наложения, приостановки и т. Д.). Настройте метод так, чтобы, когда вы вызывали его для воспроизведения, он воспроизводился так, как вы хотите, до бесконечности.
Метод может выглядеть следующим образом:
-(void) beginOrContinuePlayingAudioLoop:(BOOL)shouldPlay {
//if touchesMoved called, shouldPlay will be YES
//if touchesEnded called, shouldPlay will be NO
if (shouldPlay == NO) {
//cease playing
currentlyPlaying = NO;
}
if (currentlyPlaying == YES) {
return;
} else {
//begin playing audio
currentlyPlaying = YES;
}
}
В вашем классе ViewController определите BOOL (текущее воспроизведение), которое указывает, воспроизводится ли в данный момент звуковой цикл.
В отличие от использования стандартных распознавателей жестов IBAction, рассмотрите возможность переопределения более общих вызовов сенсорного ответчика, прикосновений к перемещению и прикосновений, округленных в вашем представлении.
В touchesMoved установите BOOL вашего VC на YES, а затем запустите ваш метод зацикливания звука, чтобы начать воспроизведение. Метод «воспроизведения» должен всегда проверять и видеть, воспроизводится ли звук, и только начинать воспроизведение
Также поместите проверку в ваш метод, который возвращает / выходит из вашего метода, когда звуковой цикл уже воспроизводится, это позволит избежать наложения.
В прикосновении к закруглению убейте звук любым способом, который вы выберете, и сбросьте BOOL на NO.