iPadのdrawRectメソッドのココア表示で、いくつかCGPaths
を描画しています。私はUIGraphicsGetCurrentContext()
の文脈にそれらを直接描画し始めましたが、私のパスが本当に長くなったときにパフォーマンスが低下しました。他の質問severalに基づいて、私はCGLayer
を使用して探し始めた。CGLayerとアンチエイリアスCGPaths
私は現在、内部のパスをレンダリングすることをやっていますCGContextRef
私はCGLayerGetContext
と呼んでいます。ここで私がやっているの基本的なアウトラインです:
// rect comes from the drawRect: method
layer = CGLayerCreateWithContext(context, rect.size, NULL);
layerContext = CGLayerGetContext(layer);
CGContextSetLineCap(layerContext, kCGLineCapRound);
// Set the line styles
CGContextSetLineJoin(layerContext, kCGLineJoinRound);
CGContextSetLineWidth(layerContext, 1.0);
CGContextSetStrokeColorWithColor(layerContext, [UIColor blackColor].CGColor);
// Create a mutable path
path = CGPathCreateMutable();
// Move to start point
//...
for (int i = 0; i < points.count; i++) {
// compute controlPoint and anchorPoint
//...
CGPathAddQuadCurveToPoint(path,
nil,
controlPoint.x,
controlPoint.y,
anchorPoint.x,
anchorPoint.y);
}
// Stroke the path
CGContextAddPath(layerContext, path);
CGContextStrokePath(layerContext);
// Add the layer to the main context
CGContextDrawLayerAtPoint(context, CGPointZero, layer);
を今は、私は良いパフォーマンスの図面を得るが、私のラインは非常にギザギザであり、アンチエイリアスしていないようです。私は追加しようとしました
CGContextSetShouldAntialias(layerContext, YES);
CGContextSetAllowsAntialiasing(layerContext, YES);
CGContextSetInterpolationQuality(layerContext, kCGInterpolationHigh);
上記のコードに無駄です。私は、変更なしでメインのcontext
にアンチエイリアスプロパティを設定しました。同じコード結果のスクリーンショットを撮ったが、2番目のイメージはCGLayer
の描画から作成されたイメージである。ご覧のとおり、コードが同じでも、ギザギザです。layerContext
に描画されています。 CGLayer
の行を滑らかにするにはどうすればよいですか?
こんにちは@Streeter、私はまた、CgLayer isssueで立ち往生しているとCgLayerに描画する方法を把握することができません、私はこれについての質問を投稿している、見てくださいhttp://stackoverflow.com/questions/ 11341763/how-to-use-cglayer-for-optimal-drawing – Ranjit