Как вы можете выполнить функцию стирания для определенной точки в чертеже Quartz2d? - PullRequest
0 голосов
/ 27 августа 2011

Я использую этот код, чтобы нарисовать линию в quartz2d

CGPoint currentPoint = CGPointMake(rascalImage.center.x, rascalImage.center.y);
        currentPoint.y += 10;


        UIGraphicsBeginImageContext(self.view.frame.size);
        [drawingView.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        drawingView.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        lastPoint = currentPoint;

Теперь, как мне сделать функцию стирания для места пересечения ластика? Я знаю, что должен стереть определенную точку на линии (где касается ластика), я просто не знаю, как это сделать, поэтому, пожалуйста, помогите !!

Ответы [ 2 ]

1 голос
/ 08 декабря 2011
        UIGraphicsBeginImageContext(imgBlankView.frame.size);
        [imgBlankView.image drawInRect:CGRectMake(0, 0, imgBlankView.frame.size.width, imgBlankView.frame.size.height)];

        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(),lineWidth);
        CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);

        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
        CGContextBeginPath(UIGraphicsGetCurrentContext());  
        CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES);

        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint1.x, lastPoint1.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        imgBlankView.image = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();
0 голосов
/ 27 августа 2011

Я полагаю, вы не рисуете на сплошном цветном фоне?Если да, просто используйте ту же функцию для рисования фоновых линий поверх контрастных линий.

Но, поскольку у вас, скорее всего, сложный фон: как только вы закончите графический контекст, и получите UIImage излинии, которые вы нарисовали, нет способа стереть только линии.Если вы создаете какое-то сложное приложение для рисования, я бы посоветовал вам использовать слои и просто «складывать» слои один поверх другого, чтобы создать среду для рисования.

Проверьте также этот пост: Как стереть некоторую часть изображения UIImageView на iOS?

...