如何在Xcode中为这一行创建橡皮擦?

时间:2011-12-10 15:08:49

标签: objective-c ios xcode line

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

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

2 个答案:

答案 0 :(得分:4)

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

  1. 第一个选项是使用具有相同背景颜色的画笔 背景视图让它感知线条被删除了 实际上只是涂上了与背景相同的颜色。

  2. 第二个选项是使用颜色鲜艳的画笔并设置 混合模式清除,以便擦除线条,背景视图仍然是 可见。

    if(isErase) {

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

    }

答案 1 :(得分:-2)