在Cglayer中绘制时,模糊描边

时间:2014-01-09 18:15:28

标签: ios uikit core-graphics cglayer

我正在使用绘图应用程序,我在CGlayers中绘制,然后绘制grahics上下文,但我的绘图变得模糊。

这是我的代码

- (void)drawRect:(CGRect)rect
{
 CGContextRef context = UIGraphicsGetCurrentContext();//Get a reference to current context(The context to draw)
             NSLog(@"Size1%@", NSStringFromCGRect(self.bounds));

            if(self.currentDrawingLayer == nil)
            {
                self.currentDrawingLayer = CGLayerCreateWithContext(context, self.bounds.size, NULL);
            }


            CGPoint mid1 = midPoint(m_previousPoint1, m_previousPoint2);
            CGPoint mid2 = midPoint(m_currentPoint, m_previousPoint1);


            CGContextRef layerContext = CGLayerGetContext(self.currentDrawingLayer);
           // UIGraphicsBeginImageContextWithOptions(self.bounds.size,YES,0.0);

            CGContextSetLineCap(layerContext, kCGLineCapRound);
            CGContextSetBlendMode(layerContext, kCGBlendModeNormal);
            CGContextSetLineJoin(layerContext, kCGLineJoinRound);
            CGContextSetLineWidth(layerContext, self.lineWidth);
            CGContextSetStrokeColorWithColor(layerContext, self.lineColor.CGColor);
            CGContextSetShouldAntialias(layerContext, YES);
            CGContextSetAllowsAntialiasing(layerContext, YES);
            CGContextSetAlpha(layerContext, self.lineAlpha);
            CGContextSetFlatness(layerContext, 1.0f);
            CGContextBeginPath(layerContext);
            CGContextMoveToPoint(layerContext, mid1.x, mid1.y);//Position the current point
            CGContextAddQuadCurveToPoint(layerContext, m_previousPoint1.x, m_previousPoint1.y, mid2.x, mid2.y);
            CGContextStrokePath(layerContext);//paints(fills) the line along the current path.

            CGContextDrawLayerInRect(context, self.bounds, self.currentDrawingLayer);
}
根据文档,我用这个代码得到了明显的笔画,每当我们使用graphicsContext创建CGlayer时,他们会说它会提供设备的分辨率,但是为什么我会得到模糊的线条。

这是模糊线条的图像 enter image description here

此致 兰吉特

1 个答案:

答案 0 :(得分:3)

在您创建CGLayer的代码中替换它:

if(self.currentDrawingLayer == nil)
{
    CGFloat scale = self.contentScaleFactor;
    CGRect bounds = CGRectMake(0, 0, self.bounds.size.width * scale, self.bounds.size.height * scale);
    CGLayerRef layer = CGLayerCreateWithContext(context, bounds.size, NULL);
    CGContextRef layerContext = CGLayerGetContext(layer);
    CGContextScaleCTM(layerContext, scale, scale);
    self.currentDrawingLayer = layer;
}