Обнаружение ошибок отображения при использовании UIViewAnimationTransitionFlip - PullRequest
1 голос
/ 28 октября 2009

У меня есть 2 просмотра, один логин и другой дом. При нажатии на кнопку входа в моем представлении входа в систему, при успешном входе в систему пользователь перенаправляется в начальный вид. Флип-переход реализован для достижения этой цели. Проблема в том, что после переворота макет домашнего вида отображается неправильно. Представление, кажется, тянет себя немного выше, оставляя некоторое пустое пространство в нижней части домашнего вида, то есть содержимое домашнего вида не соответствует должным образом после переворачивания. Вот метод, который вызывается при успешном входе в систему:

-(void)displayHome {
if (loginController == nil) {
    [self loadhome];
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 
[homeController viewWillAppear:YES];
[loginController viewWillDisappear:YES];
[loginController.view removeFromSuperview];
[self.view addSubview:homeController.view];
[loginController viewDidDisappear:YES];
[homeController viewDidAppear:YES];
[UIView commitAnimations]; }


-(void)loadhome {

HomeController *hm = [[HomeController alloc]initWithNibName:@"Home" bundle:nil];
self.homeController = hm;
[hm release]; }

Есть идеи, как правильно отображать содержимое просмотра?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 марта 2010

Вы должны рассмотреть возможность перемещения вызовов viewDid {Appear / Disappear} в метод делегата animationDidStop следующим образом:

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

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
    [loginController viewDidDisappear:YES];
    [homeController viewDidAppear:YES];
}

Я сомневаюсь, что это решит вашу проблему (если вы не делаете какую-то компоновку в методе viewDidAppear?). Но по крайней мере методы viewDidAppear / viewDidDisappear ваших контроллеров представления будут вызываться в правильное время (когда анимация закончится, а не когда она только началась).

0 голосов
/ 28 октября 2009

Я не верю, что вам нужно вручную вызывать viewWillAppear и т. Д., Я считаю, что они все вызываются автоматически. Значит, их, вероятно, вызывают дважды, что может вызвать ошибку отображения / позиционирования?

FWIW, более простой (и я бы поспорил лучше) подход заключается в отображении контроллера входа в систему путем вызова presentModalViewController для homeController, особенно если вы наследуете от UINavigationController. Ни одно из предоставленных Apple приложений для навигации не переворачивает AFAIK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...