0

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

这是我的代码

- (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 时,他们说它将提供设备的分辨率,但是为什么我会得到模糊的线条。

这是模糊线的图像 在此处输入图像描述

问候兰吉特

4

1 回答 1

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;
}
于 2014-01-09T18:40:25.687 回答