Проблема в том, что ваш код для представления SecondaryViewController все еще выполняется из CurledViewController.Один из альтернативных подходов - создание протокола CurledViewControllerDelegate.Сделайте MainViewController делегатом CurledViewController и вызовите ваш метод делегата из showSecondary.
В CurledViewController ваш метод может выглядеть следующим образом:
- (void)showSecondary:(UIButton *)sender {
[self.delegate dismissCurledViewController:self];
}
В MainViewController ваш метод делегата может выглядеть следующим образом:
- (void)dismissCurledViewController:(CurledViewController *)controller {
[self dismissModalViewControllerAnimated:NO];
SecondaryViewController *secondaryView = [[SecondaryViewController alloc] initWithNibName:@"Secondary" bundle:nil];
[self presentModalViewController:secondaryView animated:YES];
…
}
Редактировать
Чтобы сохранить анимацию как при увольнении, так и при презентации нового контроллера модального вида, вам нужно будет ввести задержку, которая позволяет достаточновремя для завершения первой анимации.Вы можете сделать это, вызвав performSelector:withObject:afterDelay:
с соответствующим значением задержки.Однако этот подход подвержен ошибкам, поскольку предполагает, что первая анимация всегда будет иметь одинаковую длительность.
Как и Эндрю Пулио предложил в другом вопросе. Вы также можете попытаться переопределить viewDidAppear:
в вашем MainViewController, так что он ищет флаг, чтобы определить, должен ли быть представлен SecondaryViewController.Это все равно будет использовать подход делегата, о котором я упоминал выше, но MainViewController будет иметь следующие различия:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(showSecondaryViewController) {
SecondaryViewController *secondaryView = [[SecondaryViewController alloc] initWithNibName:@"Secondary" bundle:nil];
[self presentModalViewController:secondaryView animated:YES];
}
showSecondaryViewController = NO;
}
- (void)dismissCurledViewController:(CurledViewController *)controller {
showSecondaryViewController = YES;
[self dismissModalViewController:YES];
}