Как сделать анимацию переворота между двумя UIViewController при нажатии кнопки информации?

У меня есть страница входа с именем «LoginViewController». У меня есть информационная кнопка на этой странице. Если я нажимаю на нее, я хочу показать некоторую информацию о моем приложении. Также я хочу представить эту информационную страницу с помощью флип-анимации.

Код для создания информационной кнопки:

infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
infoButton.frame = CGRectMake(285, 425, 30, 30);
infoButton.backgroundColor = [UIColor clearColor];

[infoButton addTarget:self 
            action:@selector(displayInfoView) 
            forControlEvents:UIControlEventTouchUpInside];

Если я нажму кнопку информации, будет вызван метод displayInfoView. Там я могу показать UIView, чтобы отобразить некоторую информацию. Я прав?

Для флип-анимации я использовал этот код ...

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:.8];

[UIView setAnimationTransition:([loginPageView superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromRight) 
        forView:mainView
        cache:YES]; 

if ([infoView superview]) {
    [infoView removeFromSuperview];
    [mainView addSubview:loginPageView];
}
else {
    [loginPageView removeFromSuperview];
    [mainView addSubview:infoView];
}

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];

Здесь loginPageView - это представление входа в систему, которое содержит кнопку информации. infoView - это представление, которое содержит информацию о приложении. mainView - это общепринятая точка зрения, которой придерживается нынешняя точка зрения.

Теперь моя проблема в том, что вместо того, чтобы показывать UIView, могу ли я показать другой класс контроллера представления, нажимая кнопку информации? Помните, что действие переворота отлично работает с UIView. Но когда я пытаюсь использовать UIViewController, возникают проблемы.

Может ли кто-нибудь предложить мне, как показать UIViewController (в моем приложении мне нужно показать AboutViewController) при нажатии кнопки информации с эффектом переворота?


person Community    schedule 07.01.2011    source источник


Ответы (4)


Чтобы перейти к контроллеру представления:

viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:viewController animated:YES completion:nil];

Чтобы выйти из этого:

[self dismissViewControllerAnimated:YES completion:nil];
person Filip Radelic    schedule 12.09.2011
comment
Я думал, что мне нужен контроллер навигации, пока не прочитал твой ответ. - person Elliot Yap; 25.02.2014

Вот как я это делаю:

 AboutShowViewController *aboutShowViewController = [[AboutShowViewController alloc] initWithNibName:@"AboutShowViewController" bundle:[NSBundle mainBundle]];

    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:0.80];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
                           forView:self.navigationController.view cache:NO];

    [self.navigationController pushViewController:aboutShowViewController animated:YES];
    [UIView commitAnimations];

    [aboutShowViewController release];

Благодарим faysar, здесь.

person Michael Morrison    schedule 13.07.2011
comment
Контроллер навигации имеет довольно ясную цель, как и контроллеры модального представления. Зачем использовать одно для достижения цели другого? - person Filip Radelic; 12.09.2011
comment
Потому что версия Майкла работает без переворачивания UITabBar. Кто спрашивал о контроллерах модального представления? - person cheesus; 01.10.2012

В вашем понимании структуры MVC в Cocoa Touch есть фундаментальный недостаток, заключающийся в том, что контроллеры представления и представления сопоставимы и похожи. На самом деле это не так.

Возвращаясь к вашему конкретному вопросу, да, анимация основана на представлениях, а не на контроллерах представлений. Но каждое представление должно контролироваться одним из ваших контроллеров представления. И выбор того, какой вид принадлежит какому-то контроллеру, полностью зависит от вас. В вашем случае анимация может происходить между двумя представлениями с двумя разными контроллерами, или они также могут происходить между двумя представлениями одного и того же контроллера.

Что касается примеров кода, я предлагаю вам взглянуть на один из шаблонов Xcode по умолчанию, Служебное приложение, в котором эта анимация щелчка и поворота реализована в сжатой и стандартизированной форме.

person Di Wu    schedule 07.01.2011
comment
Спасибо за ответ ... Я пытаюсь сделать анимацию между двумя контроллерами представления. Не просмотры - person ; 07.01.2011
comment
Он отлично работает с контроллером просмотра и представлением. Но не работал с двумя контроллерами просмотра - person ; 07.01.2011
comment
Можете ли вы отредактировать формат кода, чтобы я мог взглянуть на него? Формат настолько запутан, что я даже не знаю, с чего начать. - person Di Wu; 07.01.2011

простые строчки кода

YourViewController *city = [self.storyboard instantiateViewControllerWithIdentifier:@"YourViewController"];
[UIView beginAnimations:nil context:nil];
[UIView  setAnimationDuration:.5];
[self.navigationController pushViewController:city animated:YES];
[UIView  setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
person User558    schedule 07.02.2017