2011-07-26 78 views
4

我做了一些挖掘這件事,但似乎沒有真正回答我的特定問題(甚至沒有這個:Is it possbile to removeFromSuperview with Animation?)。removeFromSuperview與動畫和視圖管理

基本上,我的應用程序以歡迎屏幕開始,用戶點擊「登錄」,然後進入登錄視圖,然後進入標籤欄視圖,這是實際的應用程序。

我這樣做的方式是我編寫了一個自定義類 - TabBarController,它設置了所有選項卡及其各自的視圖控制器。現在,當用戶點擊「登錄」時,我打電話給removeFromSuperview並顯示標籤欄。

我正在試圖找到一種方法來設置從登錄頁面到標籤欄的過渡動畫。我在這裏嘗試了一些建議的解決方案,但似乎沒有人能夠完成這項工作。這是我在signin.m視圖控制器中的代碼。我期待動畫出現在的視圖(理想情況下,不僅僅是淡出,而且還有更多酷炫的東西,比如翻轉等)。

//when done signing in --> go to the tab bar view 
-(IBAction)done:(id)sender { 

TabBarController *tabController = [[TabBarController alloc] init]; 
[UIView beginAnimations:@"removeWithEffect" context:nil]; 
[UIView setAnimationDuration:4.0]; 
self.parentViewController.view.frame = CGRectMake(0,0,320,480); 
self.parentViewController.view.alpha = 1.0f; 
[UIView commitAnimations]; 
[self.parentViewController.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2.5f]; 
[self presentModalViewController:tabController animated:YES]; 

} 

感謝任何幫助!

回答

11

那不行。 presentModalViewController通過自己的視圖dislpay viewController的視圖。它不會替換源viewController(self)。 由於您從視圖層次結構中刪除了self.parentViewController.view,因此無法以模態方式呈現tabController,因爲您已將自己刪除。

無論如何,我會推薦你​​另一種方式來實現你的視圖佈局: 創建一個tabBarViewController並將其視圖添加到一個rootView(self.window在應用程序委託或任何你現在使用)。然後將您的登錄視圖添加到相同的視圖。由於視圖層次結構,登錄視圖將顯示在tabBar.view上方。而完成按鈕應該以這種方式實現:(我使用塊語法動畫,因爲它應該是)

-(IBAction)done:(id)sender { 
    [UIView animateWithDuration:1.0 
        animations:^{ 
         self.view.frame = CGRectMake(0, 480, 320, 480); 
         self.view.alpha = 0.0 
        } 
        completion:^(BOOL finished){ 
         [self.view removeFromSuperView]; 
        } 
    ]; 
} 

您可以動畫不僅僅是α,大小或位置更多的事情。只需看看documentation中的動畫。我想,你會對view.transform感興趣,以實現翻轉動畫。 ;)

+0

+1謝謝,@Yinkou,這是非常有幫助的。你介意在如何做到這一點上展示一些代碼:「創建一個tabBarViewController並將其視圖添加到一個rootView(app delegate中的self.window或者你現在使用的任何東西),然後將你的登錄視圖添加到同一視圖中。 「 - 不知道如何做到這一點。謝謝! – TommyG

+1

我會給你寫一個示例項目。只要告訴我我該如何給你。 – yinkou

+1

你有郵件。 ;) – yinkou

1

這是如何在動畫之後刪除視圖。

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationDelay:2.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDelegate:myView]; 
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)]; 

[UIView commitAnimations]; 

希望這會有所幫助。 快樂編碼。

+0

@TommyG Chk我的回答。這可能對你有用。 – booleanBoy

+0

無論持續時間如何,它都會瞬間淡出,並且導航欄保持不變。另外,我不知道如何添加我的下一個視圖...? – TommyG

+0

你試圖淡入視圖的alpha屬性? – booleanBoy