Как я могу уволить два модальных контроллера просмотра подряд * с анимацией *?

Да, я знаю точно такой же вопрос, но я хочу сделать это с двойной анимацией. Как отменить 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. Я только успел вызвать метод делегата, который закрывает контроллер модального представления перед представлением нового.