Вопрос

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

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

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

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

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

Я новичок в iphone / macworld, так что будь со мной помягче :-)

Рик

Это было полезно?

Решение

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

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

Чтобы достичь того, чего вы хотите, вам понадобятся таймеры.Взгляните на документацию 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:;-)

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

Другие советы

Если вы ищете способ периодически обновлять UIImageView, вы можете сослаться на следующее:http://www.shanison.com/2010/12/25/uiimageview-load-remote-image/

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

Это сработало у меня, когда я захотел изменить фон 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]; 
 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top