我的應用具有分離的主控細節界面:當用戶點擊屏幕細節側的特定按鈕時,我使用UIModalTransitionStyleFlipHorizontal
modalTransitionStyle
,以便我可以呈現新的控制器模態,並使其看起來好像詳細信息面板已「翻轉」到新界面。具有主控細節控制器的模態視圖控制器尺寸
雖然這在iPhone上運行良好,但當我在iPad上嘗試時,新模式控制器從屏幕的細節側翻轉,但在動畫結束時,它覆蓋整個屏幕。
我怎樣才能使控制器僅在畫面的細節側空翻?
我的應用具有分離的主控細節界面:當用戶點擊屏幕細節側的特定按鈕時,我使用UIModalTransitionStyleFlipHorizontal
modalTransitionStyle
,以便我可以呈現新的控制器模態,並使其看起來好像詳細信息面板已「翻轉」到新界面。具有主控細節控制器的模態視圖控制器尺寸
雖然這在iPhone上運行良好,但當我在iPad上嘗試時,新模式控制器從屏幕的細節側翻轉,但在動畫結束時,它覆蓋整個屏幕。
我怎樣才能使控制器僅在畫面的細節側空翻?
我的問題是,我是從一個普通UIViewController
呈現控制器,但我已經從拆分視圖控制器呈現它。
如果你還沒有想通了這一點呢,你最那裏的方式。您需要爲「當前上下文」定義模態視圖的表示上下文,以便它僅在詳細視圖中操作,而不是在整個超視圖中操作。
做到這一點最簡單的方法是設置一個賽格瑞在故事板視圖。在IB中,創建新的視圖控制器,添加一個segue並通過給它一個名稱「flipper」來編輯segue行,將其設置爲模態,將其設置爲翻轉並將其設置爲「當前上下文」。
一旦這些屬性設置,你可以Segue公司的視圖控制器 - 但這樣的詳細視圖控制器啓動它:
[self performSegueWithIdentifier:@"flipper" sender:self];
如果你需要做的代碼中的過渡情況就會像這樣:
UIViewController *abc = [self.storyboard instantiateViewControllerWithIdentifier:@"flipper"];
[abc setModalPresentationStyle:UIModalPresentationCurrentContext];
[abc setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:abc animated:YES completion:nil];
很好。
對我有2個選項,以正確的方式(圖動畫轉換)和哈克的方式(會粘上模態呈現控制器)。正如你所知道的,首先,你可以展示你的模態視圖控制器,一個模態視圖控制器接管屏幕,並且是呈現時唯一可訪問的控制器,但是你可以調整它的大小,以便它最終呈現在上面只有屏幕的細節部分,這裏的問題是它不打算調整大小和放錯位置,而且在旋轉發生時遇到問題真的很容易。當此控制器存在時,您也將無法與您的UISplitViewController
的主控部分進行交互。
這可以這樣來完成,例如:
UIViewController *detail = [[UIViewController alloc] init];
detail.modalPresentationStyle = UIModalPresentationFormSheet;
detail.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
if([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
[self presentViewController:detail animated:YES completion:nil];
}else{
[self presentModalViewController:detail animated:YES];
}
detail.view.superview.frame = CGRectMake(320.0, 0.0, self.view.frame.size.width - 320.0, self.view.frame.size.height);
[detail release];
您可能需要調整細節視圖控制器視圖的上海華盈的中心......這我不推薦。
您的其他解決方案是在您的詳細視圖控制器中使用UIView
動畫來交換視圖和動畫以翻轉。
要查看看起來如何,請查看iOS的Facebook應用程序,在聊天時,您可以點擊右上角的[...]按鈕,並且視圖的內容翻轉可以調整該人/聊天的通知設置。
例如,你可以做,當你在詳細視圖控制器輕按一鍵下面:
UIViewController *someOtherController = [...];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:self.view
cache:YES];
[self.view addSubview:someOtherController.view];
[UIView commitAnimations];
你會做反向將其刪除。
對不起,這是你的錯誤,你不再尋找解決方案?你有一個模態視圖控制器在屏幕的一側顯示,在細節上?動畫和只保留細節?我不確定你在尋找解決方案,但查看我的答案。我可以看到你在回答這個問題後提出了一個獎勵,所以我假設你沒有設法得到你想要的東西。 – Daniel
爲我工作的實際答案是在這裏:http://stackoverflow.com/a/12763120/126855 – Bill
哦很酷,沒有看到答案,這是我在我的答案也解釋。 – Daniel