1

よし、かなり広いaUIViewを表示する aがあります。横方向CGPathにスクロールできます。UIScrollView現在、CATiledLayer幅が 1024 ピクセルを超えているため、ビューを使用しています。

だから私の質問は:これは効率的ですか?

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

基本的に、レイヤー内のタイルが描画されるたびにパス全体を描画しています。これが悪い考えなのか、それともクリッピング四角形内にあるパスの部分のみを描画することについて CGContext が比較的スマートなのか、誰かが知っていますか?

パスはほとんどの場合、サイズと形状がタイルに似ているブロックに分割できるように設定されていますが、それには私の側でより多くの作業が必要であり、パス間にいくらかの冗長性が必要になります (形状の場合)タイルの境界を越える)、また、描画するパスを見つけるために計算が必要になります。

この方向に進む価値はありますか、それとも CGPath はすでに比較的速く描画されていますか?

4

1 に答える 1

3

必要に応じて、Quartz は、描画先の CGContext の寸法に対して、描画するすべてのものをクリップする必要があります。ただし、そのタイル内に表示されるジオメトリのみを送信すると、CPU を節約できます。タイルごとに 1 つの複数のパスを準備してこれを行う場合、(複数のパスを作成するときに) そのクリッピングを 1 回行うことと、Quartz がタイルを描画するたびに行うことについて話していることになります。効率の向上は、パスがどれだけ複雑かによって決まります。いくつかの単純な形状であれば、大したことはありません。国道網をベクトルで描いた地図だと、ものすごい!もちろん、このスピードアップとコードの複雑さの増大をトレードオフする必要があります。

あなたができることは、ものを最適化することに夢中になる前に、計測器を使用して Quartz でどれだけの時間が費やされているかを確認することです。

于 2009-07-20T23:10:20.610 に答える