我在简单的应用程序中使用了分割视图控制器。将所有内容保留为默认值即可。换句话说,当按下后退按钮时,主视图控制器总是以横向显示,并将纵向上的详细视图控制器覆盖。使隐藏/取消隐藏主视图控制器在纵向工作方式与纵向相同
我想要做的就是让主视图控制器模仿景观中的相同功能。换句话说,当设备处于横向模式时,我希望隐藏主视图控制器,直到我点击后退按钮,然后我希望它覆盖详细视图控制器。
我想做到这一点的最好方法是使用下面的代码:
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return self.bHideMaster;
}
这个工作,因为它隐藏在横向模式下的主视图控制器。然后我使用下面的代码使其重新出现:
- (void)hideUnhidePagesController:(id)sender
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
UISplitViewController* spv = self.splitViewController;
// Change hide to unhide or vica versa
self.bHideMaster= !self.bHideMaster;
// Hide the button if master is visible
if(self.bHideMaster)
{
self.navigationItem.leftBarButtonItem = self.pagesBarButton;
}
else
{
self.navigationItem.leftBarButtonItem = nil;
}
[spv.view setNeedsLayout];
[spv willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
[[self.splitViewController.viewControllers lastObject] view].frame = self.splitViewController.view.frame;
[UIView commitAnimations];
}
这几乎工作。我有2个问题:
从过渡隐藏到取消隐藏和取消隐藏到隐藏主视图控制器不显示动画和是多少明显。我添加了动画代码(参见上文),但它仅动画了详细视图控制器而不是主视图控制器。主人立即出现并消失(留下黑框消失),直到详细视图控制器滑过。
这也显示了我的第二个问题。我想让主视图控制器在横向模式下出现时将详细视图控制器重叠,而使详细视图控制器保持原样。相反,它调整了详细视图控制器的大小(与我在开始之前的横向模式下相同)。我希望主视图控制器以与纵向模式相同的方式进行交互:主控人员滑过细节控制器的顶部,并在选择某个项目时滑回。
如果我能解决问题2,那么我不担心问题1.这好像应该是在拆分视图控制器的方法,将在从左侧幻灯片母版(重叠详细视图控制器)。它以纵向模式执行,所以代码必须在那里。我如何在横向模式下调用相同的代码?
谢谢!
---------编辑1 ---------
我已经重构hideUnhidePagesController和我越来越近。窗口现在覆盖纵向和横向。如果主人在轮换时可见,仍然存在问题。它变得混乱并且颠倒了预期的行为。我在做这个工作。这里修改后的代码:
- (void)hideUnhidePagesController:(id)sender
{
// Change hide to unhide or vica versa
self.bMasterIsHidden= !self.bMasterIsHidden;
NSArray *controllers = self.splitViewController.viewControllers;
UIViewController *rootViewController = [controllers objectAtIndex:0];
UIView *rootView = rootViewController.view;
CGRect rootFrame = rootView.frame;
if(self.bMasterIsHidden)
{
rootFrame.origin.x -= rootFrame.size.width;
}
else
{
rootFrame.origin.x += rootFrame.size.width;
}
[UIView beginAnimations:@"hideUnhideView" context:NULL];
rootView.frame = rootFrame;
[UIView commitAnimations];
}
是,@Nunrey但它只是隐藏masterViewController.How移动到下一个视图时控制器取消隐藏? – 2014-08-19 05:55:58