2011-12-23 56 views
1

我有一個圖像,我希望在屏幕上重複重繪,但是,每秒都會有大量的重繪,並且每次使圖像繪製圖像都會使應用程序受到巨大的性能影響。有沒有辦法以某種方式緩存CGImageRef或使CGContextDrawImage執行速度更快?CGContextDrawImage冗餘圖像繪製

+0

爲什麼不使圖像一個UIImageView? – kennytm 2011-12-23 07:40:15

+0

這是一個圖像,但它在屏幕上的許多位置繪製。所以這將是許多UIImageViews。此外,內容是動態的,所以這些圖像的繪製位置會發生變化,所以我不認爲使用圖像視圖是正確的選擇。 – Jumhyn 2011-12-23 07:42:06

+0

使用Box2d或類似庫,並使用精靈。 – kennytm 2011-12-23 08:20:57

回答

1

嘗試使用UIImageViews,看看它是否足夠快。你可以有許多UIImageViews。您應該將其所有圖像屬性都設置爲UIImage的同一個實例。

如果是遊戲,你應該只使用遊戲引擎(Unity,Cocos2D等)。他們已經花了很多時間研究如何快速完成這個任務。

+0

這是一款遊戲,內容相當動態,所以我不想處理添加,移動和刪除所有子視圖,如果我可以避免它。 – Jumhyn 2011-12-23 07:59:16

+0

你試過看看嗎?或者你只是猜測? – 2011-12-23 08:25:57

+0

順便說一句,沒有理由不能緩存UIImageView並重用它們,就像UITableView用UITableViewCells一樣。 – 2011-12-23 08:26:46

1

CGLayerRef應該是你需要的。

從Apple文檔:

層適合於以下內容:

高品質的屏幕外繪圖您打算重用的渲染。

  • 例如,您可能正在構建場景並計劃重複使用相同的背景。將背景場景繪製到圖層,然後在需要時繪製圖層。另一個好處是,您不需要知道顏色空間或設備相關信息來繪製圖層。
  • 重複繪製。例如,您可能想要創建一個包含反覆繪製的相同項目的模式。將該項目繪製到圖層,然後重複繪製圖層,如圖12-1所示。任何您重複繪製的Quartz對象(包括CGPath,CGShading和CGPDFPage對象)如果將其繪製到CGLayer中,都會從性能提高中受益。請注意,圖層不僅適​​用於屏幕上的繪圖;您可以將其用於不是面向屏幕的圖形上下文,如PDF圖形上下文。

https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_layers/dq_layers.html#//apple_ref/doc/uid/TP30001066-CH219-TPXREF101