2011-06-20 155 views
0

我有一個tabbarview應用程序,在其中一個選項卡中有一個按鈕。當按下該按鈕時,會發生一些情況,用戶將切換到另一個選項卡。UIView在動畫效果上有差距

我在那個按鈕動畫:

UIView * fromView = self.tabBarController.selectedViewController.view; 
UIView * toView = [[self.tabBarController.viewControllers objectAtIndex:0] view]; 
[UIView transitionFromView:fromView 
        toView:toView 
        duration:0.6 
        options:(UIViewAnimationOptionTransitionCurlDown) 
       completion:^(BOOL finished) { 
        if (finished) { 
         self.tabBarController.selectedIndex = 0; 
        } 
       }]; 

這是我從here了。然而,問題在於,在動畫之後,我似乎在屏幕頂部有一個與狀態欄一樣高的間隙。有誰知道這是什麼原因造成的?這種差距迅速關閉動畫完成時(也就是當我們做self.tabBarController.selectedIndex = 0

Sorry I had to hide some details

順便說一句,這個問題如果我換動畫別的東西,甚至沒有動畫仍然存在。

附加信息,這裏的邊框細節:

from frame: x:0.000000, y:0.000000, w:320.000000, h:411.000000 
to frame: x:0.000000, y:0.000000, w:320.000000, h:431.000000 
+0

似乎有點危險,直接控制由標籤欄視圖控制器管理的視圖。爲什麼不使用setSelectedIndex交換視圖並嘗試在其周圍放置一個動畫塊。 –

+0

您是以編程方式設置任何視圖控制器還是全部通過IB完成? –

+0

@Kris,我不確定你使用setSelectedIndex交換視圖的意思,我認爲這只是標籤欄控制器的屬性? –

回答

0

我發現一個非常哈克的方式做到這一點:

CGRect to = fromView.superview.frame; 
to.origin.y -= 20; 
fromView.superview.frame = to; 

任何人,爲什麼我不得不這樣做,更優雅的方式做到這一點會得到公認的答案,可以向我解釋。

0

標籤欄控制器的區域也涵蓋了狀態欄下面的區域,因此,它是自己的客戶觀點origin.y 20.

因此,您需要在調用轉換之前正確設置傳入視圖幀。

+0

我嘗試將原點移動20,但對我來說不太合適... –

+0

嘗試覆蓋或KVO此視圖的setFrame並檢查哪些代碼將框架設置回原點20.也許這是您自己的代碼。 – Cocoanetics

+0

兩個視圖都從(0,0)開始,但第二個視圖的高度爲431,與第一個視圖的411相反。我猜這可能是問題所在,但是因爲他們都是從(0,0)開始的,所以這個位置不會一樣嗎? –