Изменить вид перед воспроизведением звука в Objective-C - PullRequest
0 голосов
/ 20 июня 2011

У меня есть программа, которая воспроизводит два звука.Я хочу, чтобы пользователь знал, какой звук воспроизводится, поэтому у меня есть два больших изображения кнопок.У меня есть три разных вида, между которыми я бы хотел поменяться: один, где обе кнопки красные (ничего не воспроизводится), и два, где одна из двух кнопок зеленая (чтобы показать, кто играет).

Основная проблема, которую я получаю, заключается в том, что мой звук воспроизводится и заканчивается до того, как изображение поменялось!(Я использую [window setContentView: firstSound] до воспроизведения звуков)

Измененный вид в конце концов появляется, но только после завершения воспроизведения метода.

Я играюзвуковые файлы, использующие NSSound (оба они короткие wav-файлы, поэтому я подумал, что это уместно)

Кто-нибудь знает, что я сделал не так?Или если есть другой способ, которым я мог бы сделать это?Спасибо, куча !!

Редактировать: Я следовал совету, чтобы сделать так, чтобы только изображение изменилось (а не вид), но возникает та же проблема.Обновление происходит после завершения воспроизведения звуков.

Вот код:

-(void)readWavs{</p> <pre><code>//[window setContentView:firstWav]; [redButton setHidden:YES]; NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"fish" ofType:@"wav"]; NSSound *sound = [[NSSound alloc] initWithContentsOfFile:resourcePath byReference:YES]; [sound play]; sleep(3); //needed so that the sound will actually play [sound stop]; [sound release]; //[redButton setHidden:NO]; //[window setContentView:testView]; sleep(2); //[window setContentView:secondWav]; NSString *resourcePath2 = [[NSBundle mainBundle] pathForResource:@"fish" ofType:@"wav"]; NSSound *sound2 = [[NSSound alloc] initWithContentsOfFile:resourcePath2 byReference:YES]; [sound2 play]; sleep(3); [sound2 stop]; [sound2 release];

}

Зеленый 'вкл'Кнопка должна отображаться до воспроизведения звука, но это происходит только после завершения метода.

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Я не уверен, правильно ли я понимаю, но как это звучит, если вы пытаетесь переключиться на совершенно другой вид при воспроизведении звука, который показывает, какой звук воспроизводится (по изображениям)? Если это так, вы должны просто использовать imageView.hidden = YES и imageView.hidden = NO для отображения правильных изображений на основе звука. Более того, вы можете использовать один вид изображения и изменить изображение, отображаемое в виде изображения, на основе звука.

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

Вы блокируете цикл выполнения с этими sleep() с.Дисплей не обновляется, пока не будет завершена вся обработка для текущего события, а этого не произойдет, пока не будет завершен этот метод readWavs.

Если вы хотите что-то сделать после завершения звука,назначьте ему делегата (вероятно, тот же объект, который начал звук) и реализуйте метод NSSoundDelegate -sound:didFinishPlaying:.Затем, в readWavs, просто запустите звук и вернитесь - ваш метод делегата будет вызван после его завершения, а поскольку readWavs возвращается немедленно, он не будет блокировать цикл выполнения.

...