2012-11-10 40 views
0

獲得真正的壞性能我有存儲在一個大文件,並細分爲很多mutablePaths像下面的圖形:從CAShapeLayer

mutablePath = CGPathCreateMutable(); 
CGPathMoveToPoint(mutablePath, NULL, 123.70,49.23); 
CGPathAddCurveToPoint(mutablePath, NULL, 124.57,54.05,124.06,58.98,123.43,63.80); 
CGPathAddCurveToPoint(mutablePath, NULL, 123.09,66.42,122.70,69.03,122.43,71.66); 
CGPathAddCurveToPoint(mutablePath, NULL, 121.64,81.02,121.35,83.58,120.92,86.11); 
CGPathCloseSubpath(mutablePath); 
CGPathAddPath(outlineMutablePath, NULL, mutablePath); 
CGPathRelease(mutablePath); 

我將所有的路徑爲4-5路徑使用CGPathAddPath,然後將每個添加到CAShapeLayer。我附上CAShapeLayers的觀點類似以下內容:

for (int i = 0; i < [_graphic.shapeLayers count]; i++) 
{ 
    [self.layer addSublayer:[_graphic.shapeLayers objectAtIndex:i]]; 
} 

圖形被正確地繪製,但是,當我去拉了一個模式的看法相同的屏幕,該圖形是,模態視圖口吃相當嚴重的當出現在屏幕上時。也注意到需要花費相當多的時間來繪製形狀,並且一般來說,當我嘗試離開它並轉到不同的導航控制器時,似乎會降低屏幕的大小。在運行時間檔案時,我注意到大部分時間都在CALayer layoutSublayersCALayer drawInContext

該圖形確實有很多路徑,但並不複雜,我認爲iOS應該有這麼多麻煩繪製它。當我在drawRect中手動繪製這些路徑時,我沒有得到這個效果。另外,一位專家告訴我,以這種風格繪製圖形對性能會更好。這讓我相信我在某個地方做錯了什麼。

回答

6

嘗試在所有CAShapeLayersself.layer之間設置shouldRasterize屬性至YES