2012-04-19 7 views
0

enter image description here次のコードを使用して、iphoneでペイントブラシを作成しています。iphoneでペイントブラシを描いているときに線からドットを削除するには?

@interface Canvas : UIImageView { 
    CGPoint location; 
} 

@property CGPoint location; 
.m file 
@synthesize location; 

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    self.location = [touch locationInView:self];  
} 

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentLocation = [touch locationInView:self]; 

    UIGraphicsBeginImageContext(self.frame.size); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    //CGContextSetBlendMode(ctx, kCGBlendModeOverlay); 


    [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
    CGContextSetLineCap(ctx, kCGLineCapRound); 
    CGContextSetBlendMode(ctx, kCGBlendModeNormal); 
    CGContextSetLineWidth(ctx, 5.0); 
    CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0); 
    //CGContextSetBlendMode(ctx, kCGBlendModeOverlay); 
    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, location.x, location.y); 
    CGContextAddLineToPoint(ctx, currentLocation.x, currentLocation.y); 
    CGContextStrokePath(ctx); 
    self.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    location = currentLocation; 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentLocation = [touch locationInView:self]; 

    UIGraphicsBeginImageContext(self.frame.size); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    // CGContextSetBlendMode(ctx, kCGBlendModeOverlay); 

    [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
    CGContextSetBlendMode(ctx, kCGBlendModeNormal); 
    CGContextSetLineCap(ctx, kCGLineCapRound); 
    CGContextSetLineWidth(ctx, 5.0); 
    CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0); 
    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, location.x, location.y); 
    CGContextAddLineToPoint(ctx, currentLocation.x, currentLocation.y); 
    CGContextStrokePath(ctx); 
    self.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    location = currentLocation;  
} 

それは働くが、drawn.iが、私はこれを達成することができ、それらのドットを削除すると滑らかなストレートline.Howを望む中であるラインにおける一定の距離の後、いくつかの点がある描きながらですか?

答えて

0

あなたは同じイメージを何度も何度も繰り返し使用していますが、これを古いイメージに重ねるのは正しいでしょうか? 私はすべてのタッチで新しいコンテキストを使用しようとします。次に、それを既存の画像に乗じます。 おそらくそれは奇妙な外観の理由thatsですか?

開始点と終了点が異なる場合は、チェックを追加することもできます。

さらに、描画するための追加の方法を作成する必要があります。あなたはTouchesMovedとTouchesEndedに冗長コードを持っています。

+0

私が正常にモードを変えても、同じ画像が何度も繰り返し使用されることはありません。また、初めての場合は – Bhoomi

+0

の結果をスクリーンショットで表示してください。 – calimarkus

+0

透明な色で描画すると問題が発生するだけですか?実線の青い線は大丈夫ですか?あなたはタッチのすべての位置を保存することができ、変更のたびに現在の行全体を新たに描画することができます。 – calimarkus

関連する問題