2013-11-19 8 views
2

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

Редактировать: подробнее. Я хочу показать новое изображение только на 1 секунду. Затем должно отображаться старое изображение. Вот почему я хочу, чтобы функция сна включалась. Мы нацеливаемся на настольную игру с карточками здесь ...

Предложения кому-нибудь?

myUIImageViewSubclass.image = [UIImage imageNamed:@"newImage.jpg"]; 

[myUIImageViewSubclass refresh]; // <- that's what I'm looking for 

sleep(1); 
//do something else 
myUIImageViewSubclass.image = [UIImage imageNamed:@"oldImage.jpg"]; 

ответ

3

Дисплей не будет обновлять изображение до возврата метода и нет ничего, что вы можете сделать о том, что как работает цикл отображения. Если ваша обработка занимает достаточно много времени, чтобы произвести заметную задержку в пользовательском интерфейсе, вы должны отправить этот код в другую очередь.

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

myUIImageViewSubclass.image = [UIImage imageNamed:@"newImage.jpg"]; 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    sleep(1); 
    //do other stuff 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     myUIImageViewSubclass.image = [UIImage imageNamed:@"oldImage.jpg"]; 
    }); 
}); 
+0

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

+0

Изменение обратного образа должно быть в основном потоке, см. Мое обновление. – Kevin

+0

работает, спасибо! –

0

Я ничего об этих детекторах жеста не знаю, но вы можете использовать touchesBegan:withEvent: и touchesEnded:withEvent методы в контроллере представления.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSSet *t = [event touchesForView:_myImageView]; 
    if([t count] > 0) { 
     // Change image here 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSSet *t = [event touchesForView:_myImageView]; 
    if([t count] > 0) { 
     // Or change image here 
    } 
} 

Не следует использовать метод сна внутри этих методов, или будут задерживать

Смежные вопросы