#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.