1

写真に線を引くことができる写真アプリを開発中です。背景は写真で、drawrectを介してサブビューに線を描画します。

すべてが機能しますが、(消しゴムのように)サブビューの行を消去するにはどうすればよいですか?clearColorをsetStrokeとして使用してみました。

このように線を消すことはできますか?

4

3 に答える 3

2

kCGBlendModeCopy完全に透明な色で描画したい場合は、ブレンド モードを に設定する必要があります。

これは通常、CGContextSetBlendMode関数で行われます。UIBezierPath描画に使用する場合は、strokeWithBlendMode:alpha:メソッドを使用することもできます。

于 2012-05-19T16:16:44.550 に答える
1

@omz によって与えられた応答の実装は次のようになります:
( viewcontrollerのメイン ビューの上に配置されてimgBlankいると仮定します)UIImageView

-(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;
}
于 2012-05-19T17:49:34.857 に答える
0

strokeWithBlendMode:alpha: を使用して UIBezierPath でこれを行うという@omzの2番目の提案を使用してみましたが、うまくいきました。コードは次のとおりです。

if (pen) {
    [self updateColorFromPen];
    [path setLineWidth:3.0];
} else if (eraser) {
    [[UIColor clearColor] setStroke];
    [path setLineWidth:42.0];
    [path strokeWithBlendMode:kCGBlendModeCopy alpha:1];
}
于 2013-12-20T20:46:12.650 に答える