Стирание не работает - PullRequest
       16

Стирание не работает

0 голосов
/ 21 декабря 2011

Я рисую линии и любые формы, как я хочу, но стирая это не работает,

Для рисования я использовал следующий код

в этом коде я нарисовал с помощью кварцевого сердечника

previousPoint1 = [touch previousLocationInView:m_img];
                previousPoint2 = [touch previousLocationInView:m_img];
                currentPoint = [touch locationInView:m_img];


                //
                previousPoint2 = previousPoint1;
                previousPoint1 = [touch previousLocationInView:m_img];
                currentPoint = [touch locationInView:m_img];
                // calculate mid point
                CGPoint mid1 = [self midPoint:previousPoint1 :previousPoint2];
                CGPoint mid2 =[self midPoint:currentPoint :previousPoint1];
                UIGraphicsBeginImageContext(m_img.frame.size);
                [m_img.image drawInRect:CGRectMake(0, 0, m_img.frame.size.width, m_img.frame.size.height)];
                CGContextRef context = UIGraphicsGetCurrentContext();
                CGContextMoveToPoint(context, mid1.x, mid1.y);
                // Use QuadCurve is the key
                CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y); 
                CGBitmapContextGetColorSpace(context);   



                //CGContextSetStrokeColor(<#CGContextRef context#>, <#const CGFloat *components#>)
                CGContextSetStrokeColorWithColor(context, color.CGColor);
                CGContextSetLineCap(context, kCGLineCapRound);
                CGContextSetLineWidth(context,m_width);
                CGContextStrokePath(context);
                m_img.image = UIGraphicsGetImageFromCurrentImageContext();
                UIGraphicsEndImageContext();

и для стирания рисунка я использовал следующий код

            m_widthString=[userdefault valueForKey:@"EraserWidth"];  
            m_width=[m_widthString floatValue];
            previousPoint1 = [touch previousLocationInView:m_img];
            previousPoint2 = [touch previousLocationInView:m_img];
            currentPoint = [touch locationInView:m_img];
            previousPoint2 = previousPoint1;
            previousPoint1 = [touch previousLocationInView:m_img];
            currentPoint = [touch locationInView:m_img];
            // calculate mid point
            CGPoint mid1 = [self midPoint:previousPoint1 :previousPoint2]; 
            CGPoint mid2 =[self midPoint:currentPoint :previousPoint1];
            UIGraphicsBeginImageContext(m_img.frame.size);
            [m_img.image drawInRect:CGRectMake(0, 0, m_img.frame.size.width, m_img.frame.size.height)];

            CGContextRef context = UIGraphicsGetCurrentContext();
            CGContextSetStrokeColorWithColor(context, [[UIColor clearColor] CGColor]);
            CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
            CGContextSetBlendMode(context, kCGBlendModeClear);
            CGContextSetLineCap(context, kCGLineCapRound);
            CGContextSetLineWidth(context,m_width);
            CGContextMoveToPoint(context, mid1.x, mid1.y);
            CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y); 
            CGContextDrawPath(context, kCGPathFillStroke);
            m_img.image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

во время стирания я изменил режим наложения, даже если он не работает

но не работает, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 03 января 2012

для стирания вы должны смотреть на изображение и использовать CGContextSetBlendMode (context, kCGBlendModeClear); это работает прямо сейчас для меня ...

...