1

カスタム SGCircleView で円を描画するために CoreGraphics を使用します。触れたときに円を放射状のグラデーションで塗りつぶしたいので、生の円(SGCircleLayer)で1つのレイヤーを描画してから、グラデーションで別のレイヤーを追加するのが私のアプローチです。問題は、円がどういうわけか「粒状」に見えることです。

それが SGCircleLayer のコードです。

- (void) drawLayer: (CALayer *) layer inContext: (CGContextRef) ctx {
    UIGraphicsPushContext(ctx);
    UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect: CGRectInset(layer.bounds, CLineWidth / 2, CLineWidth / 2)];
    self.path = circlePath.CGPath;
    [[UIColor whiteColor] setStroke];
    circlePath.lineWidth = CLineWidth;
    [circlePath stroke];
    UIGraphicsPopContext();
}

テスト目的で、カスタム SGCircleTestView の drawRect に描画されたまったく同じ半径と線幅を持つ別の円を追加しました。

これは、SGCircleTestView (滑らかな円) の drawRect のコードです。

- (void) drawRect: (CGRect) rect {
    CGRect bounds = CGRectInset(rect, CLineWidth * 0.5, CLineWidth * 0.5);
    UIBezierPath* circlePath = [UIBezierPath bezierPathWithOvalInRect: bounds];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, CLineWidth2);
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
    [circlePath stroke];
}

SGCircleLayer の描画コードで何が間違っていますか?

プレビュー

4

2 に答える 2

1

レイヤーの contentsScale を画面と同じに設定する必要がある可能性があります。

layer.contentsScale = [UIScreen mainScreen].scale;
于 2014-12-04T08:13:55.623 に答える
0

CGLayerはお勧めしません:)

http://iosptl.com/posts/cglayer-no-longer-recommended/

于 2014-08-14T08:57:17.220 に答える