2012-08-13 85 views
1

我有一個UIViewController它有多個子視圖。每個子視圖都是UIView子類,我想通過點擊工具欄按鈕在視圖之間切換。我這樣做是利用動畫塊:從一個UIView到另一個UIView的平滑過渡

例子:

[UIView animateWithDuration:0.5 
         delay:0.0 
        options:UIViewAnimationOptionTransitionFlipFromRight 
       animations:^{ 
         [StoreView removeFromSuperview]; 
         [self.view addSubview:HomeView]; 
        } 
       completion:NULL]; 

一切實際上是工作的罰款。問題是過渡並不是很順利。例如,HomeView有五個按鈕分散(作爲設計的一部分),並且每當我從一個視圖切換到HomeView時,這些按鈕都將從一個角落出現,並在轉換後重新排列,這看起來並不美觀。

那麼,我將如何讓這些按鈕保持原位?

+0

如果您應該顯示屏幕截圖或樣機模型以及您現在獲得的內容的圖片,您可能會得到一些答案。 – Brian 2012-08-13 14:30:49

+0

我不太清楚你的問題是什麼......我不認爲你的問題中有足夠的信息。你嘗試過使用 '[UIView transitionFromView:HomeView toView:StoreView持續時間:0.75選項:UIViewAnimationOptionTransitionFlipFromRight completion:nil];'?這將取代您當前的動畫塊。 – Dustin 2012-08-13 15:01:56

+0

另外,它取決於'StoreView'中包含的內容。這只是一個普通的看法嗎?它是否包含來自網絡的數據?它是否包含High-res圖像?解決方案因問題而異。 – Ravi 2012-08-13 15:11:28

回答

0

使用複雜的子視圖進行動畫時,您可能會遇到不想要的結果。不僅會出現一些古怪,但它們有時代價昂貴,取決於視圖結構的複雜性。我會提出的一個建議是,不是自己動畫複雜的視圖,而是使用手邊的方法將視圖渲染到圖形上下文中,並將結果圖像製作爲動畫效果,使其看起來像是在爲視圖層次結構設置動畫效果。在這種情況下,您可以避免在HomeViewStoreView上執行相當於複雜轉換的操作,而只需簡單地將其轉換爲UIImageView實例。考慮下面的示例代碼:

UIImageView *storeImage = // pointer to the image rendered to a graphics context 
UIImageView *homeImage = // pointer to the image rendered to a graphics context 

[self.view addSubview:storeImage]; 
[storeView removeFromSuperview]; 

[UIView animateWithDuration:0.5 
         delay:0.0 
        options:UIViewAnimationOptionTransitionFlipFromRight 
       animations:^{ 
         [storeImage removeFromSuperview]; 
         [self.view addSubview:homeImage]; 
        } 
       completion:^(BOOL finished) { 
        [self.view addSubview:homeView]; 
        [homeImage removeFromSuperview]; 
       }]; 
+0

嗨,感謝您的回覆。我會嘗試這個,看看它會工作。 – 2012-08-14 03:34:29

+0

爲了將來的參考,在iOS 7上獲取快照的最佳方式是使用'snapshotViewAfterScreenUpdates:'。 – Can 2014-07-30 22:36:03