2012-08-10 88 views
2

我有兩個視圖,我想在兩個視圖之間切換使用核心動畫,動畫每個視圖的圖層。我想要的動畫就像UIViewAnimationOptionTransitionFlipFromLeft提供的動畫,但我無法做到。我可以讓圖層旋轉180度,然後當動畫停止時,我轉換到下一個視圖。如何才能做到這一點?核心動畫動畫圖層水平翻轉

我用作代碼如下:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"]; 
self.view.layer.zPosition = 100; 
CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); 
[animation setToValue:[NSValue valueWithCATransform3D:transform]]; 
[animation setDuration:.5]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; 
[animation setFillMode:kCAFillModeForwards]; 
[animation setRemovedOnCompletion:YES]; 
[animation setDelegate:self]; 

[self.view.layer addAnimation:animation forKey:@"test"]; 

,並在委託我過渡到下一個視圖。但是,這並沒有什麼意義,動畫也沒有默認動畫所提供的那麼生動。這怎麼能實現呢?

+0

「... FlipFromLeft」有什麼問題?當你說「不那麼活潑」時,你想要動畫是做什麼的? – 2012-08-10 18:42:49

+0

我只想使用核心動畫來嘗試它。動畫在默認動畫中看起來不像自然,而且當一個視圖完全旋轉時,我只能添加第二個視圖。我覺得默認的動畫不僅僅是在3D空間中旋轉視圖。什麼樣的動畫應該做什麼,我在這裏想念什麼。 – Sandeep 2012-08-10 18:47:44

回答

7

如何使它看起來像一個3D旋轉

您的旋轉看起來並不像它發生在三維空間中,因爲有你的變換沒有觀點。將變換的m34值更改爲像1.0/800.0這樣的小值,並且您應該看到它以透視旋轉。

CATransform3D transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); 
transform.m34 = 1.0/800.0; 
[animation setToValue:[NSValue valueWithCATransform3D:transform]]; 

3D變換的值(第三列,第四行)控制變換的視角。如果您想了解更多關於它的工作方式,請閱讀3D projection on Wikipedia的更多信息。

如何翻轉兩種觀點,好像他們是在卡片的兩面

有它看起來像這兩種觀點都是相同的觀點的兩個方面,你應該將它們添加旋轉背面π度和改變圖層的doubleSided屬性爲兩個圖層的NO。現在它們在離開你的時候不會看到。當您將旋轉應用於正面和背面圖層時,它們將更改可見的圖層。注意:將前部旋轉至π度並將後部旋轉至2π,以使其完成旋轉並朝向您。

+0

那麼這裏的問題是視圖沿Y軸旋轉,所以視圖在旋轉時似乎在中間被切割。你給出的想法令人印象深刻,但是默認的動畫是這樣的,旋轉的錨點被設置在其他點。我嘗試將錨點更改爲0,.5。但是,這也改變了視圖協調本身。我有點卡住了。 – Sandeep 2012-08-10 21:35:29

+0

圖層相對於錨點繪製。如果(0,0.5)爲您提供了正確的動畫,但位置錯誤,那麼您可以在設置錨點後簡單地設置幀。 – 2012-08-11 08:47:49

+0

是的,這是一個很酷的想法,我沒有意識到 – Sandeep 2012-08-11 09:07:17

6

你可以使用

[UIView transitionFromView:aView 
        toView:bView 
        duration:0.3 
        options:UIViewAnimationOptionTransitionFlipFromLeft 
       completion:^(BOOL finished) { 
       } 
]; 

我找到你希望有相同的超圖別的東西內兩種觀點變得有點凌亂。

+0

是的,但這種方法不適合我,所以我嘗試了其他版本的UIView動畫。 [UIView的transitionWithView:self.view持續時間:0.5選項:UIViewAnimationCurveEaseIn動畫:^ { [UIView的setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view緩存:YES]; [self.view:new.view]; } completion:nil]; 前者有一些問題,但這隻適用於在兩個視圖之間切換。順便說一句,我想用核心動畫來做。 – Sandeep 2012-08-11 14:42:31