怎么,我有这段代码。触摸移动时,视图会添加一条线。
现在,如果要为此线创建橡皮擦,该怎么办?
请早点回答我!

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:drawView];

    UIGraphicsBeginImageContext(drawView.frame.size);
    [drawView.image drawInRect:CGRectMake(0, 0, drawView.frame.size.width, drawView.frame.size.height)];

    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brushDimension);

    const CGFloat *components = CGColorGetComponents([brushColor CGColor]);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), components[0], components[1], components[2], components[3]);

    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());

    drawView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;
}

最佳答案

如果您正在寻找一种擦除功能,用户可以使用触摸来擦除行的一部分,而不是RickyTheCoder提供的撤消功能,则有2个选项。

  • 第一个选项是使用背景颜色与
    背景视图,因此它被感知为线条被擦除了
    实际上只是用与背景相同的颜色进行了绘制。
  • 第二个选项是使用颜色清晰的画笔并设置
    清除混合模式,以清除线条并保持背景视图
    可见。

    如果(isErase)
    {
    CGContextSetLineWidth(currentContext, 10);
    
    CGContextSetStrokeColorWithColor(currentContext, [UIColor clearColor].CGColor);
    
    CGContextSetFillColorWithColor(currentContext, [UIColor clearColor].CGColor);
    
    CGContextSetBlendMode(currentContext, kCGBlendModeClear);
    
    CGContextDrawPath(currentContext, kCGPathStroke);
    

  • 10-08 04:45