Я не очень люблю анимацию iOS. То, что я пытаюсь достичь, - это простое представление сообщения, которое сдвигает вертикаль снизу экрана до заданного y, а затем через несколько мгновений откат UIView по вертикали, чтобы выйти из экрана.Остановка анимации UIView, когда UIView willDisappear
[UIView animateWithDuration:0.5f
animations:^{
self.messageView.frame=CGRectMake(x, y -80, width, height);
}
completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.5f delay:2.0f options:UIViewAnimationOptionCurveLinear
animations:^{
self.messageView.frame=CGRectMake(x, y + 80, width, height);
}
completion:^(BOOL finished){
// do something...
}
];
}
} ];
Это работает хорошо, но у меня возникли проблемы с использованием этого механизма в приложении IOS UITabBar: когда я изменить вкладку, анимация стоп, я могу Infact видеть, что «закончили» завершение «ложно». Поэтому второй блок не вызывается, и просмотр сообщения остается включенным.
Вот вопросы:
- моя первая забота, чтобы понять, если код, который я написал правильно, относительно вложенной анимации.
- Я мог бы решить, проигнорировав «законченный» и выполнив код в любом случае, но я не чувствую, что это хорошая идея.
- В последнем блоке завершения я поставил некоторую логику программирования, в основном я восстанавливаю несколько состояний UIButtons , и некоторые другие небольшие изменения пользовательского интерфейса. На данный момент я не знаю, хорошая ли это идея, похоже, нет, но как может пользовательский интерфейс знает, что представление сообщения исчезло. NSNotification и KVO кажутся плохой идеей, когда речь идет о быстрых изменениях пользовательского интерфейса.
Мое предложение заключается в создании SimpleMessageViewDelegate протокол, который имеет - (Недействительными) messageFinished (или что-то подобное) метод, который называется в конце презентации сообщения для восстановления пользовательского интерфейса. Вы также можете пойти с настройкой блока, который будет выполнен в конце messageFinished, тем самым пропустив протокол и ненужные методы, представляющие сообщение. –