2011-12-09 37 views
0

我有一個UIView,我想動畫翻轉起來。這不像UIViewAnimationOptionTransitionFlipFromTop,因爲那個軸位於視圖的中間。我希望軸的位置在視圖的top,以便它翻轉起來,類似於一張紙從top axis(不是頁面剝離)翻轉。UIView動畫翻轉軸在視圖頂部

[UIView transitionWithView:self.view duration:0.6 
        options:UIViewAnimationOptionTransitionFlipFromTopAxis // <---- Wish there was an option like this     
       animations:^{ 
        // Exchange the views here 


       } completion:NULL]; 

我想這是不可能做到這一點的標準UIView動畫選項。有什麼替代方案,我可以控制翻轉軸?

回答

3

最簡單的方法可能是將想要翻轉的視圖放在較高的偏移透明容器視圖中,然後翻轉該容器。換句話說:

|-----| 
    |  | 
    | B | 
    |  | 
0 |  | 
    ||---|| 
    || A || 
    ||---|| 
    |-----| 

A是你想要翻轉的視圖; B是容器; 0是屏幕的頂部。將你的轉換應用到B;通過翻轉B的中間,你沿着它的頂部翻轉A.

你也可以做一些更復雜的事情,只需使用核心動畫來實現翻轉,但這會更容易一些。

編輯:

如果你想乘坐核心動畫的方式,基本上你需要做的是應用CATransform3D的層旋轉它繞水平軸,即theLayer.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0)。但是,它會翻轉它的中間,這是你不想要的,所以你還需要將圖層的anchorPoint從其默認值(0.5, 0.5)更改爲(0.5, 0),以便它的「原點」位於其頂部的中心位置邊緣。您可能還想使用CATransform3D的m34成員將透視效果應用於翻轉轉換,如here所述。

+0

我喜歡這個想法,但我想知道Core Animation是否會給我更多的靈活性。我的實現更先進,我所描述的,並將使用這樣的多個翻轉視圖。 CA會更快嗎? –

+0

也許吧。更新了我的回答,詳細說明了這一點。 –

+0

我有機會嘗試這個,並得到以下錯誤:語義問題:從不兼容類型'CATransform3D'(又名'struct CATransform3D')分配給'CGAffineTransform'(又名'struct CGAffineTransform')。我做錯了什麼? –