Pregunta

Estoy trabajando con una aplicación de dibujo donde dibuje dentro de CGLAYERS y luego dibuje en el contexto de Grahics, pero el dibujo se está siendo borroso.

Aquí está mi código

- (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);
}

Recibo movimientos erróneos con este código, según DOCS, siempre que creamos el CGAYER con GraphicsContext, dicen que proporcionará la resolución del dispositivo, pero luego por qué estoy recibiendo líneas de desenfoque.

Aquí está la imagen de las líneas de desenfoque. ingrese la descripción de la imagen aquí

Saludos Ranjit

¿Fue útil?

Solución

Sustituye esto en su código donde crea su CGAYER:

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;
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top