我正在尝试制作一个可以控制画笔不透明度的绘图应用程序,但是当我尝试降低不透明度时,结果就像这样。我使用核心图形。 (查看图片)。
我将如何解决此问题?
以下是我的一些代码。
-(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;
}
答案 0 :(得分:1)
请勿在{{1}}中进行绘图。在任何事件方法中,您应该更新需要绘制的内容,然后发送 - -touchesMoved:withEvent:
由于您的代码是在上面编写的,因此您在事件消息中获得的每对位置之间创建了一条路径。
您应该在setNeedsDisplay.
中创建一个路径,然后在-touchesBegan:withEvent:
中添加该路径。
答案 1 :(得分:1)
我建议您不要每次都重新保存图像,而是将每个touchesMoved
添加到数据点数组中,而不是更新每个touchesMoved
的图像。然后,在您的绘图例程中(如NSResponder建议的那样)拉出原始图像,然后重绘由您的点阵列映射出的整个路径。如果您想在某个时刻更新图片,请在touchesEnded
上进行更新,但不要在每个touchesMoved
上进行更新。