Как вы можете выполнить функцию стирания для определенной точки рисунка Quartz2d?

Я использую этот код для рисования линии в кварце2d.

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;

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


person Aspyn    schedule 26.08.2011    source источник


Ответы (2)


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

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

Ознакомьтесь также с этим сообщением: Как стереть часть изображение UIImageView на iOS?

person James    schedule 26.08.2011
comment
У вас уже была возможность попробовать это? Есть вопросы, комментарии и т.д.? Я ответил на ваш вопрос? - person James; 27.08.2011
comment
извините за поздний ответ, я использовал kClearBlendMode в качестве режима наложения или что-то в этом роде, и это заставило его работать - person Aspyn; 09.12.2011

person    schedule
comment
Привет @CrazyDeveloper, я пытался использовать ваш код, он работает, но когда я выполняю серию операций отмены и повтора, предположим, я рисую несколько линий, затем полностью отменяю и снова полностью повторяю, а затем пытаюсь стереть, он очищает весь прямоугольник , как решить эту проблему, я создал для этого другой пост, посмотрите заголовок stackoverflow.com/questions/11502320/ - person Ranjit; 18.07.2012