2010-12-06 70 views
2

這聽起來像一個初學者的問題,但由於我無法讓它在預期的時尚中工作,我希望某處能夠指向正確的方向。UiView中的UiView過渡

我試圖實現的是視圖內視圖的轉換。 我基本上想用另一個視圖(controller?!?)的內容替換視圖內的視圖。

讓我們說,我有一本書的圖像,我想在本書內部轉到另一頁面(例如從日曆視圖轉到詳細的日常視圖)。我只想把「書籍內容」(白色內容區域)包含在該過渡中,而不是整本書本身(整個屏幕)。

我可以用相同的視圖做一個轉換,沒問題,但我沒有得到它嘗試用完全不同的視圖替換視圖。 它沒有關係在單獨的視圖控制器中的視圖,或一個視圖控制器中的所有視圖,所以我還沒有得到它的工作,但更糟糕的是,我沒有想法。 所以幫助!如果請有人在那裏可以如此善良,並告訴我我做錯了什麼。 建議也非常感謝。 謝謝!

湯姆

回答

3

也許你可以隱藏一個視圖,然後使用一個UIView動畫塊顯示其他。

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view1.view cache:YES]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view2.view cache:YES]; 
[UIView setAnimationDuration: 1.5]; 
[UIView commitAnimations]; 

view1.view.hidden = YES; 
view2.view.hidden = NO; 

編輯:這就是你要找的東西?

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 
[view1 viewWillDisappear:YES]; 
[view2 viewWillAppear:YES]; 

view1.view.hidden = YES; 
view2.view.hidden = NO; 
[view1 viewDidDisappear:YES]; 
[view2 viewDidAppear:YES]; 
[UIView commitAnimations]; 

或者,你可以使用這樣的事情:

[UIView animateWithDuration:0.5 
        delay:0.0 
       options:UIViewAnimationOptionTransitionFlipFromRight 
      animations:^{ 
          [view1 removeFromSuperview]; 
          [mySuperview addSubview:view2]; 
         } 
      completion:nil]; 
1

退房的exchangeSubviewsAtIndex:方法在UIView class。只需設置您想要從其他視圖轉換到另一個視圖的子視圖的2個視圖;然後在該父視圖上調用此方法。

+0

我錯過了方法,但沒有工作對我來說。無論如何感謝您的回答! – Tom 2010-12-07 13:55:47

0

假設你有兩種觀點,A和B.它們具有相同的幀,使他們佔據了控制器的視圖相同的空間,爲您的目的顯示圖書的頁面視圖控制器。你想顯示一個,並轉換到另一個。

一種方法是將一個的alpha屬性設置爲1.0(不透明),另一個設置爲0.0(透明)。因爲這個屬性可以是動畫的,所以可以使用beginAnimations:context/commitAnimations從一個到另一個進行淡入淡出,或者使用像docs advise之類的塊方法之一。

另一種方法是在兩個視圖中爲框架中的變化設置動畫。成立了意見,使一個有框架,使得它在顯示正確的地方,其他有相同的幀但frame.origin.x等於frame.size.width - 它會被隱藏起來,因爲它是關閉屏幕或隱藏在其他視圖後面。通過將視圖A的frame.origin.x設置爲-frame.size.width並將frame B的frame.origin.x設置爲顯示位置x原點,從而爲框架設置動畫。然後設置(不包括動畫)框架A的frame.origin.x再次frame.origin.width,更新其內容,你準備到另一個頁面從右側滑動。

+0

嗨,隊友,謝謝你的回答。我現在能夠在期望的內容區域內進行「過渡」(但不是真的)。但是我暫時沒有做任何動畫,因爲我現在還沒有更多的時間來做這件事。 如果我使用單視圖進行transitionflip動畫,它會翻頁並讓我刷新視圖。 多數民衆贊成多少正是我想要的時候用另一個替換一個視圖...讓一個視圖去,打開血腥的頁面(動畫),並獲得新的視圖。不能讓這個工作,雖然.... – Tom 2010-12-07 14:11:53

+0

嗨,湯姆。在視頻遊戲中,通常會進行「雙緩衝」,在更新隱藏的單鍵時顯示一個視圖,更新隱藏的單鍵,重複。你是否保持相同的兩個視圖或試圖釋放一個並創建一個新的視圖?我真的認爲使用UIViewAnimationTransitionFlipFromRight顯示的答案會做你所需要的。 – 2010-12-07 21:52:40