2013-08-07 74 views
1

我有一個特定的場景,我試圖效仿,而且對於Cocoa Touch來說相當新,我不確定完成它的最佳方式。請原諒我缺乏的戰術知識;希望有一些清晰的說明會有所幫助。如何完成兩個UIViews之間的「90%幻燈片」

我想效仿:

的應用程序,我正在看(尤其)是Beat。下面是他們的UIViews的一個例子 - 特別是,注意底部設置的齒輪圖標。

enter image description here

當該齒輪被觸摸或刷卡時,出現兩種主要的UIView變化:

  1. 原來的UIView向上滑動屏幕大約90%的方式(所述點因爲它不會滑動全部的方式)。
  2. 一個新的UIView滑了起來,以填補這個新騰出的90%的空間。

enter image description here

這是我想完成的基本功能。

實現思路#1:單UIViewController的W /多UIViews

起初,我認爲有一個單一的UIViewController同時管理的 「主」 和 「設置」 的觀點。在這種情況下,以適當的方式轉換這些視圖將是一件相當簡單的事情。

這就是說,這對我來說似乎有點混亂。根據我的兩套功能的強大程度,這是重載單個UIViewController的祕訣。你可能會告訴我,沒關係,但蝙蝠,似乎太多了。

實現思路#2:多個UIViewControllers在自定義容器視圖控制器

這是目前我要下去的路線。

- (void)flipFromViewController:(UIViewController *)fromController 
       toViewController:(UIViewController *)toController 
{ 
    CGFloat width = self.view.frame.size.width; 
    CGFloat height = self.view.frame.size.height; 

    fromController.view.frame = CGRectMake(0.0f, 0.0f, width, height); 
    toController.view.frame = CGRectMake(0.0f, height, width, height); 

    [self addChildViewController:toController]; 
    [fromController willMoveToParentViewController:nil]; 

    [self transitionFromViewController:fromController 
         toViewController:toController 
           duration:0.5f 
           options:UIViewAnimationOptionTransitionNone 
          animations:^(void) { 
           fromController.view.frame = CGRectMake(0.0f, -(height - 100.0f), width, height); 
           toController.view.frame = CGRectMake(0.0f, 100.0f, width, height); 
          } 
          completion:^(BOOL finished) { 
           [fromController removeFromParentViewController]; 
           [toController didMoveToParentViewController:self]; 
          }]; 
} 

與此問題是過渡:它似乎沒有停止「90%它通過分離兩個分立的功能集成單獨UIViewControllers(包含在容器內的ViewController)和轉換這兩者之間的方式」。它看起來更像是打算完全轉換出一個「舊」控制器和一個「新」控制器,即使我對兩個UIViews的幀調整不應該是「完成」的動作。

在哪裏,我想指導

我不要求一個完整的解決方案 - 您的專業知識過於昂貴。 :)這就是說,對於這一點來說是相當新的,我很想知道你的正確方法是什麼。請讓我知道我是否可以提供進一步的信息。

謝謝!

回答

1

我認爲你的第二種方法是在正確的軌道上,並且你使用transitionFromViewController的直覺:ToViewController也是正確的 - 如果你希望兩個視圖控制器都存在並且處於活動狀態,我不會使用該方法。所以,我會讓控制器的齒輪視圖成爲自定義容器控制器的子視圖控制器,然後像屏幕一樣將第二個子屏幕添加到底部。然後使用animateWithDuration爲這兩個視圖創建動畫:...在最後,動畫,你應該有你想要的,而你的容器控制器將有兩個孩子。

+0

這就是訣竅!非常感謝。 – ABach

相關問題