4

我沒有做過多的動畫,我需要一些幫助。我有一個tabBarController作爲我的根控制器,並且我想要另一個tabBarController,並且我想將它作爲模態視圖控制器使用,並且我對動畫有問題。iPhone Modal查看動畫幫助

目前有四種動畫爲modalViewControllers,即

typedef enum { 
UIModalTransitionStyleCoverVertical = 0, 
UIModalTransitionStyleFlipHorizontal, 
UIModalTransitionStyleCrossDissolve, 
UIModalTransitionStylePartialCurl, 
} UIModalTransitionStyle; 

我希望有一個不同的動畫 - 從向左向右滑動。 - 我該如何做這個動畫?

對此有何幫助?


編輯:

我的想法到導航堆棧吸推tabBarController!蘋果的這種做法評論:

你永遠不希望在標籤欄控制器推到導航控制器的導航堆棧。這樣做會造成一種不尋常的情況,只有當特定的視圖控制器位於導航堆棧的頂部時, 標籤欄纔會出現。標籤欄被設計爲持久的,因此這種瞬態方法可能會讓用戶感到困惑。

我不知道。有人幫我模態視圖控制器的動畫。

+2

總是有'UIModalTransitionStyle',但不幸的是沒有匹配導航控制器轉換樣式的動畫。我想你應該使用你的另一種想法,並使用導航控制器。 – Trevor

回答

4

您可以手動編寫動畫代碼。下面是一些常見步驟:

  • 創建的UIViewController一個子類(主要是廢的控制器,以容納您的UITabBarController) - 我通常稱之爲ShellViewController
  • ShellViewControllerinit方法中(無論您使用哪一種方法),請將屏幕外部的frame設置在右側,例如,[self.view setFrame:CGRectMake(320, 0, 320, 480)];
  • ShellViewController
    • - (void)presentSelf
    • - (void)dismissSelf
  • 創建兩個方法時要出示ShellViewController實例內你UITabBarController
  • 將您UITabBarController實例創建的ShellViewController實例
  • 致電[currentView addSubview:shellViewController.view];
  • 使用上面的自定義方法來呈現和駁回ShellViewController與存儲器管理容納您UITabBarController
  • 交易隨着業務邏輯決定

這裏是動畫式的代碼(例如該- (void)presentSelf法):

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.15]; //the double represents seconds 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
[[self view] setFrame:CGRectMake(0, 0, 320, 480)]; 
[UIView commitAnimations]; 

這裏是動畫出(代碼例如在- (void)dismissSelf法):

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.15]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
[[self view] setFrame:CGRectMake(320, 0, 320, 480)]; 
[UIView commitAnimations]; 

請記住,這些動畫方法做的是:有生命的。它們不會禁用與當前視圖的交互,也不會禁止正在進/出動畫的ShellViewController的視圖/子視圖。您需要在動畫過程中手動禁用用戶交互,然後在動畫完成後將其恢復。有一個UIView方法時動畫結束後執行一個選擇:

[UIView setAnimationDidStopSelector:@selector(enableUserInteraction)]; 

可以在上述每個動畫塊[UIView setAnimationDelegate:self]後把事情處理好。當然,您需要自己編寫enableUserInteraction方法...和disableUserInteraction方法。

走這條路線是一件麻煩事,但它起作用。一旦你看到ShellViewController,它會創建一個很好的可重用片段。

1

將您的根標籤欄控制器嵌入到UINavigationController中。如果它不允許你,在它們之間粘貼一個UIViewController(使:UINavigationController嵌入UIViewController,它有一個UITabBarController的視圖添加到它)。這很糟糕,但它應該(!)工作。

0

模態視圖控制器不滑入,因爲這是標準堆棧動畫(推或彈出)。這讓用戶感到困惑。如果它是模態的,你應該從底部滑動它或做一個翻轉或什麼。

爲什麼你需要模態視圖上的標籤欄?通常情況下,模態視圖用於數據輸入,音頻回放等。tab bar HIG指出「通常情況下,使用標籤欄來組織應用程序級別的信息」。在模態視圖控制器中有一個標籤欄會打破這一點。誠然,人們不必嚴格遵循HIG中的每條準則,但是這是一個您應該考慮遵循Apple的建議的案例。

您能告訴我們更多關於您的具體用例的信息,所以我們可以就什麼可能是合適的解決方案提出建議?也許分段控制更合適?

+0

我想創建滑動標籤欄。但決定爲下一組tabBarItem提供一個模態視圖。我需要爲此目的的滑動動畫 - http://stackoverflow.com/questions/6700184/sliding-uitabbaritems-in-uitabbarcontroller – Legolas