2011-03-18 91 views
4

創建CA動畫的最佳方式是什麼?我最初的方法是創建一個CALayers的網格,每個都有一個獨特的變換矩陣(我有一些OpenGL的經驗,這是我如何在GL)。要做到這一點,我需要將視圖分成幾個四邊形(每個由CALayer表示)。問題是,我該如何做到這一點。在動畫開始和使用之前拍攝視圖的快照,直到動畫完成(如轉場可以完成),但我不確定如何拍攝這樣的快照是沒問題的。「彎曲」3D中的UIView

任何指針(特別是鏈接代碼示例)將黃金價值:)的

回答

2

經典的回答:

我覺得就是你可能尋找的CALayer的renderInContext:。每個UIView都有一個CALayer,您可以通過layer屬性獲取CALayer。所以你可以構建你想要的CGContext(假設它將是一個位圖上下文),讓視圖的圖層將視圖繪製到上下文中,然後根據這些數據做任何你想要的事情,無論它是將它分成一堆UIImages和因此UIImageViews的CoreAnimation效果,上傳到OpenGL或其他。

Apple示例代碼直接由Q&A 1703提供,它使用UIKit CoreGraphics擴展程序直接跳轉到UIImage並挖掘所有可用窗口以捕獲整個屏幕的圖像。但它向你展示了事物的本質。


更新在2015:

作爲iOS的7,如在Q&A 1817記載,UIView提供-drawViewHierarchyInRect:afterScreenUpdates:這降低了甚至進一步快照的圖所必需的代碼 - 四行在蘋果的示例代碼。它看起來Q &一個1703已經被撤回,因爲它已經不在蘋果方面;上面的鏈接是一個外部歸檔副本。所以1817年的建議是要遵循的東西。

+0

這正是我所期待的。請記住很久以前閱讀它,但不記得要搜索的相關關鍵字。非常感謝。 – Krumelur 2011-03-19 19:15:29

+0

問與答鏈接已損壞。 – paulvs 2015-04-08 12:38:03

+0

這似乎是因爲iOS 7按照QA1817引入了更簡單的方法 - https://developer.apple.com/library/ios/qa/qa1817/_index.html#//apple_ref/doc/uid/DTS40014134;我現在需要衝進一次會議,但稍後會嘗試更新我的答案。 – Tommy 2015-04-08 13:58:07