1

画面をタッチして図形を描くアプリを作ろうとしています。

ある点から別の点に線を引くことはできますが、新しい線を引くたびに線が消えてしまいます。

これが私のコードです:

CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
    //[self addSubview:noteView];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    location = [touch locationInView:touch.view];
    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();
    [[UIColor blueColor] set];
    CGContextSetLineWidth(context,10);
    drawAtPoint.x =location.x;
    drawAtPoint.y =location.y;
    CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
    CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
    CGContextStrokePath(context);

    lastPoint.x =location.x;
    lastPoint.y =location.y;
}

あなたの助けに感謝-

ニル。

4

3 に答える 3

1

それが呼び出されるたびdrawRectに、白紙の状態から始めます。再度描画するために、以前に描画したものをすべて追跡しないと、指の最後のスワイプのみを描画し、古いスワイプは描画しなくなります。drawRect呼び出されるたびに再描画するために、すべての指のスワイプを追跡する必要があります。

于 2009-11-04T11:28:58.057 に答える
0

すべての行を再描画する代わりに、画像に描画してから、drawRect:メソッドで画像を表示するだけです。画像はあなたのために線を蓄積します。もちろん、この方法では undo の実装が難しくなります。

iPhone アプリケーション プログラミング ガイドから:

UIGraphicsBeginImageContext 関数を使用して、新しい画像ベースのグラフィックス コンテキストを作成します。このコンテキストを作成した後、イメージ コンテンツをそこに描画し、UIGraphicsGetImageFromCurrentImageContext 関数を使用して、描画した内容に基づいてイメージを生成できます。(必要に応じて、描画を続けて追加の画像を生成することもできます。) 画像の作成が完了したら、UIGraphicsEndImageContext 関数を使用してグラフィック コンテキストを閉じます。Core Graphics を使用したい場合は、CGBitmapContextCreate 関数を使用してビットマップ グラフィック コンテキストを作成し、画像コンテンツをそこに描画できます。描画が終了したら、CGBitmapContextCreateImage 関数を使用して、ビットマップ コンテキストから CGImageRef を作成します。

于 2009-11-04T13:51:17.377 に答える