2013-02-28 77 views
0

我正試圖找到一種方法來爲UIView的3D旋轉創建動畫。如果選擇「橫幅」樣式,我希望它看起來像推送通知的動畫。我試圖使用類似UIView的真實3D旋轉動畫

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"]; 
CATransform3D t = CATransform3DIdentity; 
t = CATransform3DTranslate(t, 0, -self.bounds.size.height/2, 0); 
t = CATransform3DRotate(t, M_PI_2, 1, 0, 0); 
t = CATransform3DTranslate(t, 0, -self.bounds.size.height/2, 0); 
[anim setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]]; 
[anim setToValue:[NSValue valueWithCATransform3D:t]]; 
anim.removedOnCompletion = NO; 
[anim setDuration:0.25]; 
anim.fillMode = kCAFillModeForwards; 
anim.delegate = self; 
[self.layer addAnimation:anim forKey:@"Rotation"]; 

但是,這看起來很平坦,並不像推送通知的橫幅那麼逼真的3D。我怎樣才能讓這個動畫更逼真?

+0

現實主義的主要部分是你缺少視角。設置't.m34 = -1.0/500.0;'開始轉換之前(你可以在[這篇文章的最後](http://ronnqvi.st/the-math-behind-transforms/) 。除此之外,動畫翻譯 - 旋轉 - 翻譯將在一條直線上完成(你可以看到我在說什麼[這裏](http://ronnqvi.st/translate-rotate-translate/)) – 2013-02-28 08:23:08

回答

2

您可能想深入瞭解CMNavBarNotificationView的實現方式。

另外,還有不同類型的CALayer,你可能想從你的動畫視圖的+(Class)layerClass中挑選一個。看起來我是你堅持使用普通的CALayer。