如何提高CGLayer的绘图质量

时间:2013-09-02 09:59:33

标签: ios uiview core-graphics uibezierpath cglayer

我使用CoreGraphics在自定义SGCircleView中绘制圆圈。因为我希望圆圈在被触摸时用径向渐变填充,我的appraoch是用原始圆(SGCircleLayer)绘制一个图层,然后用渐变添加另一个图层。问题是圈子看起来有些“粗糙”。

这是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代码时我做错了什么?

Preview

2 个答案:

答案 0 :(得分:1)

您可能需要将图层的contentsScale设置为与屏幕相同。

layer.contentsScale = [UIScreen mainScreen].scale;

答案 1 :(得分:0)