0

何度も描くパスの「パレット」があります。おそらく100。

次のように指定した場所にこれらを描画したいと思います。

CGPathRef foo = ...
CGPathRef bar = ...
// do this dozens of times at differing points
[self draw:context path:foo atX:100 andY:50];
[self draw:context path:bar atX:200 andY:50];

私が今していることは翻訳です。動作しますが、これが最もパフォーマンスの高いソリューションかどうかはわかりません。このようなもの:

- (CGRect) draw:(CGContextRef) context path:(CGPathRef) path atX:(CGFloat) x andY:   (CGFloat)y
{
    CGContextSaveGState(context);
    CGContextTranslateCTM(context, x, y);
    CGRect pathBoundingRect = CGPathGetBoundingBox(path);
    CGContextSetFillColorWithColor(context, drawColor);
    CGContextAddPath(context, path);
    CGContextDrawPath(context, kCGPathFill);
    CGContextRestoreGState(context);
    return pathBoundingRect;
}

改善のための提案はありますか?

4

1 に答える 1

0

それらが移動する場合は、それぞれを独自の UIView に描画し (最初はすべて同じになります)、ビュー自体を配置する方がおそらくはるかに高速です。

そうすれば、(ビューの) 変換は CPU ではなく GPU で自動的に行われ、drawRect:パス オブジェクトごとに 1 回だけ呼び出す必要があります。

于 2012-06-30T12:20:33.197 に答える