2009-07-20 72 views
1

好的,我有一個UIView,它顯示一個很寬的CGPath。它可以水平滾動UIScrollView。現在,我有使用CATiledLayer的觀點,因爲它的寬度超過了1024像素。什麼是繪製大型CGPath的最有效方式?

所以我的問題是:這是否有效?

- (void) drawRect:(CGRect)rect { 
    CGContextRef g = UIGraphicsGetCurrentContext(); 
    CGContextAddPath(g,path); 
    CGContextSetStrokeColor(g,color); 
    CGContextDrawPath(g,kCGPathStroke); 
} 

基本上,我在繪製圖層中的一個圖塊時繪製了整個路徑。有人知道這是不是一個好主意,或者是CGContext相對比較聰明,只繪製剪裁矩形內部的路徑部分?

該路徑大多數是以這樣一種方式建立的,即我可以將它分解成與塊大小和形狀相似的塊,但這需要我做更多工作,需要路徑之間的一些冗餘(對於跨瓦片邊界的形狀),還需要進行一些計算以找出要繪製的路徑。

在這個方向移動是值得的,還是CGPath已經相對快速地繪製?

回答

3

根據需要,Quartz必須對它繪製的所有CGContext的維度進行裁剪。但是,如果您只發送在該圖塊內可見的幾何圖形,它仍然可以節省CPU。如果你通過準備多個路徑來做到這一點,每個瓦片一個,你就是在做每次裁剪(當你創建多​​個路徑時),而Quartz每次都在繪製一個瓦片。效率的提高將歸結爲你的道路有多複雜:如果它是一些簡單的形狀,沒有什麼大不了的;如果它是國家道路網絡的矢量繪製地圖,它可能是巨大的!當然,您必須針對代碼複雜性的提高來進行交易。

你可以做的是使用工具來查看在你瘋狂優化內容之前在Quartz中花費了多少時間。

相關問題