2009-06-17 4 views
1

У меня есть довольно простой вопрос. У меня есть несколько (5) UIImageView изображений на экране . Когда я нажимаю кнопку, я хочу изменить каждое изображение на что-то еще. Я также хочу воспроизводить звук при изменении каждого изображения.iphone обновить изображения UIImageView

Так что в основном я хочу, чтобы каждый звук менялся.

Проблема состоит в том, что по какой-либо причине, если я говорю 5 изображений,
звук сначала воспроизводится, а затем изображения меняются.

Это похоже на то, что изображения обновляются только тогда, когда управление возвращается к пользователю .

Как я могу «заставить» его обновить изображения, как только я скажу, какое изображение будет отображаться?

Я новичок в iphone/Macworld, так легко идти на меня :-)

Rick

+0

Любой пример кода из обработчика или объяснение того, как вы подключаете кнопку к ответу (изменить изображение/воспроизведение звука). Возможно, это просто основная логическая проблема. – stefanB

+0

Я пропустил отладчик, поэтому я знаю, что он правильно наносит код. Я думаю, что ответ ниже отвечает на вопрос. Если пользовательский интерфейс обновлен только в основном потоке, тогда я не сделаю этого. Разве кто-то не имеет никаких мыслей? –

ответ

0

Это похоже на то, что изображения обновляются только тогда, когда управление возвращается пользователю для ввода.

Именно это и происходит. Пользовательский интерфейс обновляется по основному потоку, поэтому обновления не обновляются, пока ваш код работает.

Для достижения желаемого вам понадобятся таймеры. Взгляните на документацию NSTimer. Вам нужно создать таймер, который запускает метод для изменения второго изображения, а затем запросить таймер для изменения вашего третьего изображения. Существует удобный способ создать таймер, как вам нужно: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

[NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage2:) userInfo:nil repeats:NO]; 

тогда, у вас есть метод:

- (void) updateImage2(NSTimer*)theTimer 
{ 

    //Update image 2 here 
    // play sound 2 here 

    [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage3:) userInfo:nil repeats:NO]; 
} 

Я оставлю вас, чтобы реализовать метод updateImage3:; -)

Выполнение таких обновлений, как это дает основной поток возможность обновить интерфейс.

+0

Итак, как кто-то выполнит это?(Видя, что изображения отображаются один за другим, а не все сразу в конце). Вам нужно было бы перейти в openGL? Кажется, такая простая вещь :-) –

+0

добавлен в ответ. –

+0

Обратите внимание, что, как и ответ Бена в дубликате, вы также можете использовать - [NSObject performSelector: withObject: afterDelay:] –

0

Это звучит, как вы, вероятно, загрузки изображений с диска или сети во время воспроизведения звука асинхронно , Возможно, вы используете AudioServicesPlaySystemSound вместе с UIImage +imageWithContentsOfURL:? Здесь наиболее полезен реальный способ загрузки изображений и воспроизведения звука.

0

Это работает для меня, когда я хотел изменить UIImageView фон и обновить его, и продолжить выполнение кода после что:

-(void)imgTapped_event:(UIImageView*)imgViewTapped 
{ 
    imgViewTapped.backgroundColor=[UIColor whiteColor]; 

    //let the system update ui changes 
    [NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0f]]; 

    //continue your code execution, play sounds etc... 

    //my helper method to play sound 
    [self playSound:@"goodAnswer" sync:YES loops:0]; 
} 
Смежные вопросы