UIImageView / AVAudioPlayer синхронизация - PullRequest
1 голос
/ 01 июня 2011

У меня есть UIView, который обладает UIImageView в качестве подпредставления.Этот вид изображения предназначен для отображения анимации (в основном, с помощью метода startAnimating).Когда анимация запускается, мне также нужно воспроизвести звук.Для этой цели я использую AVAudioPlayer prepareToPlay и методы play.

Проблема, с которой я сталкиваюсь, заключается в том, что в ПЕРВЫЙ РАЗ запускается глобальная анимация (сама анимация изображения + звук), звук систематически воспроизводится до того, как анимация изображения будет фактическиначалось.Совсем не странно, если учесть, что синхронизации вообще нет.

Но как этого добиться?Есть ли какой-то обратный вызов, который можно использовать, чтобы знать, когда воспроизводится анимация изображения, и запускать воспроизведение звука оттуда ... Или, может быть, соединение UIImageView и AVAudioPlayer вообще не очень хорошая идея?

Вот мойтекущая реализация:

- (void)playSample {
    previewView_ = [[[PreviewView alloc] initWithFrame:topView.bounds
                                      backgroundImages:backgroundAnimationImages 
                                       characterImages:characterAnimationImages] autorelease];

    [previewView_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];


    [topView addSubview:previewView_];

    [audioPlayer_ setDelegate:self];
    [audioPlayer_ setVolume:1.0];   

    [previewView_ startPreview]; // This calls startAnimating on the UIImageView of previewView_
    [audioPlayer_ playSound];

}

1 Ответ

1 голос
/ 02 июня 2011

Может быть, вы могли бы использовать:

[audioPlayer playAtTime: [audioPlayer deviceCurrentTime] + someDelayTimeInterval]

Я обнаружил, что audioPlayer (или prepareToPlay) не работает с моими обновлениями дисплея, поэтому я в итоге создал аудиоPlayer для каждого звука в viewDidLoad: и воспроизвел его в методе, вызываемом в фоновом потоке:

[self performSelectorInBackground:@selector(playAudioPlayer:)
withObject:self.audioPlayer];
...