1

我正在尝试制作一个可以控制画笔不透明度的绘图应用程序,但是当我尝试降低不透明度时,结果是这样的。我使用了核心图形。(检查图像)。

在此处输入图像描述

我将如何解决这个问题?

这是我的一些代码。

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event//upon touches
{
    UITouch *touch = [touches anyObject];

    previousPoint1 = [touch locationInView:self.view];
    previousPoint2 = [touch locationInView:self.view];
    currentTouch = [touch locationInView:self.view];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event//upon moving
{
    UITouch *touch = [touches anyObject];

    previousPoint2 = previousPoint1;
    previousPoint1 = currentTouch;
    currentTouch = [touch locationInView:self.view];

    CGPoint mid1 = midPoint(previousPoint2, previousPoint1); 
    CGPoint mid2 = midPoint(currentTouch, previousPoint1);

    UIGraphicsBeginImageContext(CGSizeMake(1024, 768));
    [imgDraw.image drawInRect:CGRectMake(0, 0, 1024, 768)];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineCap(context,kCGLineCapRound);
    CGContextSetLineWidth(context, slider.value);
    CGContextSetBlendMode(context, blendMode);
    CGContextSetRGBStrokeColor(context,red, green, blue, 0.5);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, mid1.x, mid1.y);
    CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
    CGContextStrokePath(context);

    imgDraw.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsGetCurrentContext();
    endingPoint=currentTouch;
}
4

2 回答 2

2

touchesMoved我建议您不要每次都重新保存图像,而不是每次都更新图像,而是将每个图像添加touchesMoved到数据点数组中。然后,在您的绘图例程中(正如 NSResponder 建议的那样)拉出原始图像,然后重新绘制由您的点数组映射出的整个路径。如果您想在某个时候更新您的图像,请在 上进行touchesEnded,但不是每次都在touchesMoved.

于 2012-07-16T07:30:41.913 回答
1

不要在-touchesMoved:withEvent:. 在任何事件方法中,您都应该更新需要绘制的内容,然后发送 -setNeedsDisplay.

正如上面编写的代码一样,您正在从事件消息中获得的每对位置之间创建一条路径。

您应该在 中创建一个路径-touchesBegan:withEvent:,并在 中添加它-touchesMoved:withEvent:

于 2012-07-16T07:27:56.860 回答