У меня есть этот метод в UIViewController
, чтобы отобразить сообщение в течение трех секунд, а затем исчезнуть. mainMessageLabel
- это UILabel
, указанный в файле интерфейса.Остановка анимацииWithDuration до завершения
- (void) showTempMessage: (NSString*) message
{
_mainMessageLabel.text = message;
_mainMessageLabel.alpha = 1;
[UIView animateWithDuration: 1
delay: 3
options: 0
animations: ^{
_mainMessageLabel.alpha = 0;
}
completion: ^(BOOL finished) {
_mainMessageLabel.text = @"";
_mainMessageLabel.alpha = 1;
}];
}
метод отлично работает, если я называю это по крайней мере четыре секунды после предыдущего вызова, но если я называю это раньше, когда предыдущий экземпляр еще анимацией, метка исчезает, и я должен ждать еще четыре секунды пока я не могу снова позвонить ему на работу. Каждый раз, когда я вызываю этот метод, я хочу, чтобы он остановил предыдущую анимацию и отображал новое сообщение в течение трех секунд и исчезал.
Я попытался ответы на другие вопросы здесь, например, добавление UIViewAnimationOptionBeginFromCurrentState
к options:
, и даже добавление [_mainMessageLabel.layer removeAllAnimations]
к началу моей функции, но ничего не работает. Есть ли у вас какие-либо предложения?
Я получил его для работы с использованием первого метода удаления блока завершения, но без beginFromCurrentState. – user3770280
Согласен. Учитывая характер анимации, начало с текущего состояния не имеет значения (и с iOS 8 мы больше не будем использовать «начать с текущего состояния», во всяком случае). Я на самом деле собираюсь удалить эту чудовищность второго подхода, опасаясь, что кто-то может это сделать в своем производственном коде! – Rob