2012-05-19 1 views
1

Я работаю над фотоприложением, где вы можете рисовать линии на фотографии. Фон - это фото, а через drawrect я рисую линии на подвью.Как стирать строки в подвале

Все работает, но как я могу стереть строки в подзаголовке (например, ластик), я попробовал с clearColor как setStroke.

Можно ли стереть такие строки.

+0

Пожалуйста, смотрите эту ссылку http://stackoverflow.com/questions/3863931/want-to-add-manual-erasing-option-in-ipad-painting -application-by-quartz/12797513 # 12797513 –

ответ

1

Реализация ответа дается @omz может быть:
(при условии imgBlank является UIImageView помещается в верхней части основного зрения ViewController)

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.imgBlank]; 
    NSValue *valCurrPoint=[NSValue valueWithCGPoint:CGPointMake(currentPoint.x, currentPoint.y)]; 
    [self.dots addObject:valCurrPoint]; 
    [self performSelector:@selector(draw:) withObject:valCurrPoint afterDelay:0]; 
} 

-(void)draw:(NSValue*)pointz{ 
    CGPoint point=[pointz CGPointValue]; 
    UIGraphicsBeginImageContextWithOptions(self.imgBlank.frame.size,NO,0); 
    [self.imgBlank.image drawInRect:CGRectMake(0, 0, self.imgBlank.frame.size.width, self.imgBlank.frame.size.height)]; 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(),tickness);//set the tickness here 
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0f, 1.0f, 1.0f, 1.0); 
    CGContextBeginPath(UIGraphicsGetCurrentContext());   
    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), _lastPoint.x, _lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), point.x, point.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    self.imgBlank.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    _lastPoint = point; 
} 
+0

Это отлично работает, спасибо – Martin

+0

Сохранено! Спасибо. –

2

Вам необходимо установить режим смешивания на kCGBlendModeCopy, если вы хотите, чтобы с полностью прозрачным цветом был нанесен какой-либо эффект.

Обычно это делается с помощью функции CGContextSetBlendMode. Если вы используете UIBezierPath для рисования, вы также можете использовать метод strokeWithBlendMode:alpha:.

+0

Спасибо за ваш ответ – Martin

0

Я попытался с помощью второго предложения @ ОМЗ делая это в UIBezierPath, используя strokeWithBlendMode: alpha: и он отлично работал. Вот код:

if (pen) { 
    [self updateColorFromPen]; 
    [path setLineWidth:3.0]; 
} else if (eraser) { 
    [[UIColor clearColor] setStroke]; 
    [path setLineWidth:42.0]; 
    [path strokeWithBlendMode:kCGBlendModeCopy alpha:1]; 
}