0

我计划做简单的绘图,使用它可以绘制直线和自由手绘,根据它改变的选择。但是问题是当我尝试绘制 1 条线时,直线从起点重复超过 10 或 15 条线,自由手绘工作正常。我已经在这里发布了我的代码。请提出解决此问题的建议。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    mouseSwiped = NO;
    UITouch *touch = [touches anyObject];
    previousPoint1 = [touch previousLocationInView:self.view];
    previousPoint2 = [touch previousLocationInView:self.view];
    currentPoint = [touch locationInView:self.view];
    lastPoint = [touch locationInView:self.view];
}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // Work download Flag
        _isWorkModified = YES;

    mouseSwiped = YES;

    UITouch *touch = [touches anyObject];
        previousPoint2 = previousPoint1;
    previousPoint1 = [touch previousLocationInView:self.view];
    currentPoint = [touch locationInView:self.view];

    UIGraphicsBeginImageContext(self.view.frame.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    if(_selectedShape == 3)
    {
        // calculate mid point
        CGPoint mid1 = [self midPoint:previousPoint1 :previousPoint2];
        CGPoint mid2 = [self midPoint:currentPoint :previousPoint1];

        CGContextMoveToPoint(context, mid1.x, mid1.y);
        CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
        CGContextSetLineCap(context, kCGLineCapRound);
        if(self.isEraseButtonSelected)
        {
            CGContextSetLineWidth(context, 40.0);
            CGContextSetRGBStrokeColor(context, 0.823,0.886,0.898,1.0);
        }
        else
        {
            CGContextSetLineWidth(context, 3.0);
            CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
        }
        CGContextStrokePath(context);
    }
    else if(_selectedShape == 0)
    {
        CGContextSetLineWidth(context, 3.0);
        CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
        CGContextBeginPath(context);
        CGContextMoveToPoint(context, lastPoint.x, lastPoint.y);
        CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y);

        CGContextClosePath(context);
        CGContextStrokePath(context);

    }
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

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

        NSLog(@"touch ended");
        if(!mouseSwiped)
        {
            NSInteger index = [[[AnswerDataHandler getAnswerDataHandler]workAreaArray] indexOfObject:self];
            [[ImageStoreHelper getImageStoreHelper] saveImageForQuestionNumber:index image:drawImage.image];
        }

    }


 }
4

0 回答 0