Изменение образа пользовательского интерфейса со временем

#iphone #image #uiimageview

#iPhone #изображение #uiimageview

Вопрос:

Я хочу изменить изображение UIImageView и через 3 секунды вернуться к первому изображению…Это мой код:

 -(void)change: (UIImageView *)sender
{
    UIImage *image = [UIImage imageNAmed: @"anImage"];
    [sender setImage:image];
    [self performSelector: @selector(doNothing) withObject:nil afterDelay:3];
    [sender setImage: [UIImage imageNamed: @"firstImage"]];
}
  

Это не работает.

Ответ №1:

Попробуйте:

 -(void)change: (UIImageView *)sender
{
    UIImage *image = [UIImage imageNAmed: @"anImage"];
    [sender setImage:image];
    [sender performSelector: @selector(setImage:) withObject:[UIImage imageNamed: @"firstImage"] afterDelay:3];
}
  

performSelector планирует вызов селектора с некоторой задержкой. Это не задерживает выполнение текущего метода

Ответ №2:

Не могли бы вы также опубликовать код для doNothing , пожалуйста?

Если doNothing действительно ничего не делает, то происходит то, что doNothing метод вызывается через 3 секунды после выполнения следующей строки:

 [self performSelector: @selector(doNothing) withObject:nil afterDelay:3];
  

Но вот в чем дело, следующая строка выполняется сразу после того, как ваш doNothing метод был запланирован для запуска через три секунды:

 [sender setImage: [UIImage imageNamed: @"firstImage"]];
  

Другими словами, выполнение метода не ожидает завершения вашего doNothing метода, оно просто продолжается и doNothing выполняется в отдельном потоке.

Ответ №3:

вы сказали, что функция ничего не должна выполнять после 3 секунд задержки. Итак, через 3 секунды он будет вызван, поэтому измените изображение обратно на firstImage в функции DoNothing.