我要单击以使擦除按钮,以便在移动线时擦除线。但是我做不到。我已成功实现create d Line的代码。但是卡住了如何擦除Line。我在iOS中较新。这是我的代码。请帮忙

@implementation Line
{
    UIBezierPath *path;
    UIImage *incrementalImage; // (1)
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder])
    {
        [self setMultipleTouchEnabled:NO];
        [self setBackgroundColor:[UIColor whiteColor]];
        path = [UIBezierPath bezierPath];
        [path setLineWidth:2.0];
    }
    return self;
}
- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        [self setMultipleTouchEnabled:NO];

        path = [UIBezierPath bezierPath];

                [path setLineWidth:1.0];
                self.backgroundColor=[UIColor clearColor];

        _button = [UIButton buttonWithType:UIButtonTypeCustom];
                [_button setTitle:@"" forState:UIControlStateNormal];
        _button.userInteractionEnabled=YES;
                _button.frame =CGRectMake(100, 130, 100, 100);
                _button.backgroundColor =[ UIColor redColor];
                [_button addTarget:self
                    action:@selector(erase)
          forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:_button];

    }

    return self;

}

- (void)drawRect:(CGRect)rect
{
    [incrementalImage drawInRect:rect]; // (3)
    [path stroke];
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path moveToPoint:p];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path addLineToPoint:p];
    [self setNeedsDisplay];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event // (2)
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path addLineToPoint:p];
    [self drawBitmap]; // (3)
    [self setNeedsDisplay];
    [path removeAllPoints]; //(4)
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self touchesEnded:touches withEvent:event];
}

- (void)drawBitmap // (3)
{
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, 0.0);
    [[UIColor blackColor] setStroke];
    if (!incrementalImage) // first draw; paint background white by ...
    {
        UIBezierPath *rectpath = [UIBezierPath bezierPathWithRect:self.bounds]; // enclosing bitmap by a rectangle defined by another UIBezierPath object
        [[UIColor whiteColor] setFill];
        [rectpath fill]; // filling it with white
    }
    [incrementalImage drawAtPoint:CGPointZero];
    [path stroke];
    incrementalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

-(void)erase
{
    NSLog(@"erasingLIne");
   }

最佳答案

BOOL值进行擦除。 BOOL isErase;

点击擦除按钮时

if button tapped
    {
     isErase =Yes;
    }else
    {
    isErase = NO;
    }



  [path strokeWithBlendMode:isErase?kCGBlendModeClear:kCGBlendModeNormal
  alpha:1.0f];


希望对你有效。

10-08 09:11