1

mutablePaths大きなファイルに保存されているグラフィックがあり、次のような多くに分割されています。

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 ~ 5CGPathAddPathつのパスに統合し、それぞれを に追加しCAShapeLayerます。CAShapeLayers次のようなビューにアタッチします。

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

グラフィックは正しく描画されていますが、グラフィックが表示されている同じ画面でモーダル ビューを表示すると、画面に表示されるときにモーダル ビューがひどく途切れます。また、形状を描画するのにかなりの時間がかかることに気付きました。一般的に、画面を離れて別のナビゲーション コントローラーに移動しようとすると、画面が重くなるようです。CALayer layoutSublayers時間プロファイルを実行すると、ほとんどの時間が費やされていることに気付きましたCALayer drawInContext

グラフィックには多くのパスがありますが、それほど複雑ではなく、iOS描画にそれほど苦労する必要はありません。drawRect でこれらのパスを手動で描画していたとき、この効果が得られませんでした。さらに、専門家から、このスタイルでグラフィックを描画するとパフォーマンスが向上すると言われました。これにより、どこかで何か間違ったことをしていると信じるようになります。

4

1 に答える 1

6

すべてまたはのshouldRasterizeプロパティをに設定してみてください。YESCAShapeLayersself.layer

于 2012-11-10T19:42:14.293 に答える