我在簡單的應用程序中使用了分割視圖控制器。將所有內容保留爲默認值即可。換句話說,當按下後退按鈕時,主視圖控制器總是以橫向顯示,並將縱向上的詳細視圖控制器覆蓋。使隱藏/取消隱藏主視圖控制器在縱向工作方式與縱向相同
我想要做的就是讓主視圖控制器模仿景觀中的相同功能。換句話說,當設備處於橫向模式時,我希望隱藏主視圖控制器,直到我點擊後退按鈕,然後我希望它覆蓋詳細視圖控制器。
我想做到這一點的最好方法是使用下面的代碼:
- (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