2015-04-03 55 views
0

我通過CGAffineTransform創建了一個動畫。我用animateWithDuration:並在其中設置變換。但是我忘了所有的觀點都應該從一個確定的角度來翻譯。我想達到同樣的透視變換:CATransform3d/CGAffineTransform爲現有動畫變換添加透視圖嗎?

http://cdn.iphonehacks.com/wp-content/uploads/2014/08/ios-8-safari-tab-view.jpg

當我想到:

  • 它是三維空間;

  • 所有反應均等地有一條邊屬於一個不可見的表面;

  • 所有的rects都有相同的角度(所以所有的rects都是平行的)。

  • 一個人的外表專注於中心,所以人類似乎認爲所有的反光鏡都有不同的角度(但它只是由於透視效果而發生)。

據我瞭解CGAffineTransformCATransform3D本身之間的轉換所以對我來說,他們之間沒有什麼區別。

的問題:

1)我知道如何表示旋轉,縮放,平移等,但如何實現繞錨點的觀點?我應該執行哪些操作和順序?

2)即使我會找到正確的動作序列,那麼如何將它們應用到現有的動畫CGAffineTransform?據我瞭解,一半的轉換應該是靜態的,另一半應該是動態的。如何合併它們?

+0

你有沒有想過這個想法?我遇到了非常相似的東西。 – MikeyWard 2015-09-03 18:35:56

回答

0

問題1

我已經寫代碼,但沒有立體。

我拒絕透視的原因是它太慢了。

在iPad中,您無法通過刪除不可見頁面來優化應用程序,因爲它們都可能可見(或從邊緣太近以釋放它們)。所以你只能減小它們的尺寸。這很奇怪,但如果你想實現iphone版本,那麼你不能優化大小,但可以優化不可見頁面。

在iPad中,您需要太多的計算,因此也需要重新調用。此外,您可以在背景中存儲UIWebView對象,該對象消耗大量內存(我檢查了UIWebView s的很多實例,網站爲onliner.by - 它只是「很難」且複雜的網站)。甚至在蘋果產生內存警告之前,一切都變得緩慢。

問題2

警告!CGAffineTransformCATransform3D只能在自己之間轉換。至少不是每個CATransform3D都可以轉換成CGAffineTransform,例如,如果它包含像我這種情況的視角。

在我來說,我需要兩個CATransform3DCGRect因爲即使你申請的第一個,那麼你只縮放整個看法,但如果你申請的第二個你降低視圖的邊界,但其子視圖不是按比例縮放和某些屬性(例如字體大小)根本沒有縮放,您需要手動縮放它們。最後,我使用了以下組合: 1)邊界是屏幕中心的全屏中心; 2)與1相同,但應用變換來縮放並移動到合適的位置; 3)與2相同,但是我從transform屬性中刪除了縮放並通過更小的邊界再次添加,並在必要時減小了大小,字體等。這種狀態只是爲了減少內存消耗。