我正在開發使用核心圖形的iphone圖表應用程序。我的要求如下。 我已經在drawRect方法中實現了我所有的繪圖功能。當在圖表中發生某些更新時,我需要調用[self setNeedsDisplay:true]並從開始調用drawRect方法(意味着它執行drawRectMethod中的所有方法,因此在觸摸事件中繪圖不太平滑。我需要在drawRect方法中繪製一些特定的部分,而不是所有的核心圖形?這可能與核心圖形?繪製在單獨的圖層 - 客觀的c核心圖形
回答
不清楚你的意思是「單獨的圖層」,但從你的問題我會認爲你的意思-drawRect:
目前是一個很大且複雜的函數,它會進行大量的計算,所以運行速度太慢,因爲它會被調用很多,你不提到CALayer,所以我假設你並不是指這裏的實際層。解決方法是將計算結果從0123中移出。只有在數據實際發生變化時,才能計算出所需的一切。在-drawRect:
你應該使用預先計算的值,這應該快得多。
例如,既然您提到了Core Graphics,我假設您使用的是CGPath之類的東西。您應該只在數據更改時計算您的CGPath,然後將CGPath存儲爲ivar。你應該只是畫你的CGPath在-drawRect:
。如果CGPath特別複雜(因此速度較慢),您甚至可能需要將其預渲染爲CGImage,然後合成CGImage。
儘可能在iPhone上,應該完全避免使用Core Graphics,而是在Photoshop中預先渲染圖像並將它們保存在Resources文件夾中。 3G並不需要計算能力才能跟上覆雜的Core Graphics處理。這是蘋果公司近期在Mac上的建議的逆轉,它不鼓勵使用預先渲染的圖像,並鼓勵漸變和路徑,而3GS由於處理器速度更快而不那麼重要,但仍是目前對iPhone的建議,並且可能會在他們發佈更高分辨率的iPhone顯示器之前。如果您有動態圖像,這當然是不可能的,但是您應該記住靜態圖像。
編輯:
首先,如果可行的話,請確保你只畫那些髒的部位。 -drawRect:
傳遞給你一個髒矩形。如果一個特定的元素不與那個矩形相交,那麼你不需要重繪它。同樣,您應該使用-setNeedsDisplayInRect:
來指示哪些部分需要更新。如果您可以輕鬆地將視圖分解爲不重疊的矩形(或偶爾重疊的矩形),那麼這很有效。
如果你有一個視圖是由各個重疊組件組成,你想獨立計算,那麼你可以在CALayer
上繪製每個組件,然後將這些圖層附加到視圖上(可能在視圖本身上不畫任何東西)。然後,您可以在已更改的圖層上調用-setNeedsDisplay
。這是我可能用於垂直線的例子。我會創建一個CALayer
視圖的寬度和高度,將其背景顏色設置爲線條顏色,並將其附加到所需位置的視圖。然後移動這條線非常快(甚至可以使用變換來旋轉它),稍後移除線條也很簡單。如果你想要更奇特的線條繪畫(消除鋸齒等),你當然可以使圖層變寬,並在圖層內繪製線條。如果需要,該圖層可以與視圖一樣大。
Core Animation Programming Guide有關於CALayer
以及如何使用它的大量文檔。
- 1. 如何通過核心圖或核心圖形繪製Ven圖?
- 2. 在CALayer中繪製核心圖形
- 3. 核心圖形繪製的核心動畫
- 4. 帶核心圖形的繪圖文本
- 5. 繪製popOver使用核心圖形
- 6. 繪製輪廓與核心圖形
- 7. 核心圖形不繪製某些行
- 8. 核心圖形繪製比使用核心圖形移動更有效嗎?
- 9. 如何使用核心圖形層圖
- 10. 在覈心圖中繪製多線圖
- 11. 核心繪圖圖形標籤步驟
- 12. 核心繪圖條形圖列
- 13. 如何使用核心圖形繪製圖形
- 14. NetworkX:在圖層中繪製圖形
- 15. 在CPTAxisLabel(核心圖)中繪製一個彩色的矩形
- 16. 在覈心圖形中繪製隨機像素的16x16網格
- 17. 使用java圖形API繪製圖層
- 18. 在iPhone中使用核心圖實現繪圖圖形
- 19. 與核心圖形繪製路徑的問題 - iPhone
- 20. coregraphics圖層與核心動畫圖層
- 21. 如何將視圖控制器上的核心繪圖中心?
- 22. 在c中繪製圖形
- 23. 核心繪圖 - 僅繪製圖中特定範圍內的點
- 24. 在iPad應用程序中繪製核心圖形
- 25. 如何在覈心圖形中連續繪製曲線ios
- 26. 在覈心繪圖中繪製切線圖
- 27. iphone中的核心圖形
- 28. 使用核心圖與jQuery繪製條形圖,餅圖,散點圖
- 29. 如何在覈心圖上繪製圖上的可疑值?
- 30. 核心圖 - 在散點圖上繪製非常小的數字