Анимация перехода iOS для pushViewController
У меня есть AppDelegate, которому принадлежит окно, и с этого момента - главный вид, из которого при переходе к следующему виду я выдвигаю новый вид, чтобы использовать тот же контроллер навигации и панель инструментов:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
self.appview = [[AppointmentView alloc] initWithNibName:@"AppointmentView" bundle:[NSBundle mainBundle]];
@synchronized(self.MahAppntmnts){ // Set the view's appointment
[appview setMyAppointment:[[MahAppntmnts MyAppointments] objectAtIndex:indexPath.section]];
}
[super addChildViewController:self.appview];
AppDelegate *del = (AppDelegate *)[UIApplication sharedApplication].delegate;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[del.navigationController pushViewController:self.appview animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
}
Теперь это прекрасно работает для переключения видов, но когда я пытаюсь вернуться, я получаю тот же скучный флип-переход. Я попытался установить в методе делегирования viewWillDissapear моего AppView:
-(void) viewWillDisappear:(BOOL)animated
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:0.375];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];
[super viewWillDisappear:animated];
}
Кажется, это работает, когда я возвращаюсь к предыдущему представлению, но когда я пытаюсь перейти к новым представлениям (используя тот же метод, что и раньше), они либо не появляются, либо я переключаюсь на то же представление. Так что я предполагаю, что этот код не должен быть на viewWillDissapear, или что я делаю что-то не так...
1 ответ
Ну, я нашел решение, проблема была в том, что я неправильно понял, кому принадлежала анимация. Я добавил код, найденный в viewWillDissapear (расположенный в представлении с push-уведомлением), в делегат viewWillAppear представления, которое выполнило перемещение в первую очередь (код, найденный в accessoryButtonTappedForRowWithIndexPath), так что управляющее представление инициирует анимацию при нажатии на другое представление и когда другой вид переходит обратно к нему, отображается обратная анимация. Решил все проблемы и работает как шарм.