2009-10-28 41 views
1

我有2个视图,一个登录和另一个家。点击登录视图中的登录按钮,登录成功后,用户被重定向到主页视图。实现翻转过渡来实现此目的。问题在翻盖发生后,主视图布局显示不正确。该视图似乎将自身拖拽一点点,在主视图的底部留下一些空白区域,即翻页后主视图内容不适合。以下是成功登录时调用的方法:在使用UIViewAnimationTransitionFlip时遇到显示错误

-(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]; } 

有关如何正确显示视图内容的任何想法?

感谢

回答

0

我不相信你需要手动手动调用viewWillAppear中等等,我相信他们都被自动调用。所以他们可能会被调用两次,这可能会导致显示/定位错误?

FWIW,更简单(我认为更好)的方法是通过调用homeController上的presentModalViewController显示登录控制器,特别是如果您从UINavigationController继承。 Apple提供的基于导航的应用程序都没有翻转AFAIK。

+0

你好Neil Mix,我没有在这个应用程序中使用导航控制器。在这种情况下,需要遵守翻转客户的要求。我会检查与viewWillAppear方法的调用并回发结果。 – 2009-10-29 04:50:49

+0

更新:未调用viewWillAppear不会对主视图的显示产生任何影响 – 2009-10-30 04:54:33

0

你应该考虑移动viewDid {出现/消失}调用到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方法将在正确的时间(当动画结束时,而不是刚启动时)调用。