Анимация перехода 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), так что управляющее представление инициирует анимацию при нажатии на другое представление и когда другой вид переходит обратно к нему, отображается обратная анимация. Решил все проблемы и работает как шарм.

Другие вопросы по тегам