Как я могу уволить два модальных контроллера просмотра подряд * с анимацией *?
Да, я знаю точно такой же вопрос, но я хочу сделать это с двойной анимацией.
Как отменить 2 контроллера Modal View в последовательности?
мой код такой же, как вопрос выше,
просмотр контроллера A (в навигационном контроллере) - контроллер модального просмотра B - контроллер режима просмотра C
здесь псевдокод
notification to B (as delegate) // I changed order of this two lines,
dismiss C *without* animation // but it was same.
(notification from C, in B)
dismiss B *with* animation
Если я использую анимацию, когда я увольняю C, это не сработает, B не будет уволен, потому что увольняет анимацию C.
Проблема заключается в следующем: я не могу запустить другую анимацию увольнения, если есть анимация.
Можно ли проиграть анимацию подряд?
Это не только проблема увольнения анимации, но и для других анимаций iOS.
P.S: Я думаю, что могу использовать таймер, чтобы дождаться окончания первой анимации, но он грязный и нестабильный, не так ли?
Small Talk: в моей программе
- A: просмотр списка статей
- B: написать просмотр статьи
- C: вид входа (если пользователь не вошел в систему)
Сегодня, я должен добавить просмотр соединения, мне нужно уволить 3 просмотров во времени LOL, как я могу помочь этому?
Ответы
Ответ 1
iOS 5.0 и выше:
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
Это работает, если у вас есть:
A - starting view controller
M1 - modally presented by A
M2 - modally presented by M1
Поместите эту строку кода в класс контроллера представления M2 (и кнопку или что-то еще, чтобы активировать ее), и она "достигнет" по иерархии и скажет A к dismissViewControllerAnimated:...
Однако ответ Rahul Vayas, вероятно, является лучшим подходом для случаев, когда у вас есть неизвестное количество контроллеров модального просмотра, растянувшихся между "A" и последним видом Modal.
Ответ 2
Вы можете создать NSNotification, а затем из корня, где первый модальный модуль отклоняется от первого модального контроллера представления, и все остальные автоматически исчезнут. Я сделал это в одном из своих приложений.
Ответ 3
Вы можете использовать [self rejectModalViewControllerAnimated: (BOOL)], если вы хотите, чтобы представление отклоняло модальное представление. Если вы вызываете это в обоих контроллерах, он должен работать. Я сам не пробовал, но это кажется логичным.
Я должен добавить, что если вам нужно представить несколько модальных представлений в строке, возможно, вам стоит рассмотреть возможность использования разных парадигм для некоторых из них. Например, вид входа в систему может быть предупреждением, а не модульным контроллером.
Ответ 4
Я столкнулся с подобными типами проблем, пытаясь заставить анимацию работать последовательно. Я хотел попробовать следующее:
что, если вы поместите вызов для второй анимации (т.е. уменьшите B) внутри вызова выполнитьSelectorOnMainThread? Это заставило бы меня подумать, что вторая анимация будет вынуждена ждать завершения первого.
Я еще не тестировал его. Удачи - мне очень интересно, какое решение вы придумали.
Ответ 5
Вы можете удалить 2-й вид, используя
[AviewController dismissModalViewControllerAnimated:YES];
Здесь AviewController является объектом A.
Надеюсь, это поможет вам.
Ответ 6
[self dismissModalViewControllerAnimated:(BOOL)]
не работает. Вторая анимация не срабатывает. В iOS 5 вы можете использовать [self dismissViewControllerAnimated:YES completion:^{}];
, но не обратно совместимый с 4.0. Я только успел вызвать метод делегата, который закрывает контроллер модального представления перед представлением нового.