2014-01-10 78 views
0

我正在研究不適合任何標準Apple ViewController的應用程序中的少量視圖,並且正在爲我的問題尋找最佳解決方案。針對非標準導航的設計

這裏是一個快速樣機它的樣子:

http://pl.tinypic.com/r/2va1kbc/5

我有一個主視圖控制器是打造出2個部分:
1.這始終是含有一些標誌
可見頂部 2.內容部分正在改變 - 每個內容都是一個類(擴展UIViewController)

現在比較棘手的部分是我想在內容更改之間做一些動畫 - 當用戶首先單擊按鈕時其中一個頂部部分向下滑動 - 向下推動當前viewController,覆蓋全屏幕,並使用新的viewController內容向上滑動。

所以問題是如何構建它,以便以後使用和擴展(如UINavigationController)。

我創建了一個主視圖的UIViewController和使用補充冠捷:

LogoUIViewController *logoViewController = [[LogoUIViewController alloc] init]; 
[self.view addSubview:logoViewController.view]; 

LoginViewController *loginViewController = [[LoginViewController alloc] init]; 
loginViewController.delegate = self; 
[self.view addSubview:loginViewController.view]; 

我使用代理來初始化主視圖控制器的過渡,因爲我找不到這樣做的更好的方法。

但是,由於這些問題,我陷入了困境:
1.如何使內容視圖控制器只使用屏幕的一部分(改變它的大小)?
2.如何爲這兩個視圖設置動畫,使其看起來像頂層正在推開內容?
3.如何以簡單的方式交換視圖(如UINavigationController popViewController方式)並在它們之間自動初始化動畫。

我知道這些都是3個問題,但我認爲它可以通過構建主視圖控制器的更好方式來解決。有沒有人有這樣的自定義導航系統的經驗?

回答

1

A UIPageViewController可能會有幫助。它將包含您的內容視圖控制器。包含頁面視圖控制器的根vc也可以被委託給它。

當您想要啓動內容視圖更改時,根vc可以使用它的頁面vc視圖執行任何喜歡的動畫(如向下滑動以顯示更大的頁眉視圖)。當頁面轉換完成後,作爲代理,根vc可以得到通知

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 

然後動畫恢復它的視圖。我認爲這非常簡單,並且可以爲容器vc模式節省大量的精力。 Xcode默認的Paged App模板是一個非常好的起點。