形状を描くときにラインが消去されます
質問
画面に触れて形状を描画するためのアプリケーションを作成しようとしています。
あるポイントから別のポイントに線を引くことができますが、それぞれの新しいドローごとに消去されます。
これが私のコードです:
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;
}
あなたの助けに感謝-
nir。
解決
発見したように、-drawrectはビューの内容を表示する場所です。ここで描くものを画面上で「見る」だけです。
これは、ステージにラインを含むMovieclipを追加する可能性のあるフラッシュのようなものよりもはるかに低レベルであり、しばらくして、ステージにラインを含む別のMovieclipを追加し、2本の線が表示されます。
あなたはいくつかの仕事をして、次のようなものをprDobobにセットアップする必要があります。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
location = [touch locationInView:touch.view];
[self addNewLineFrom:lastPoint to:location];
lastPoint = location;
[self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}
- (void)drawRect:(CGRect)rect {
context = UIGraphicsGetCurrentContext();
for( Line *eachLine in lineArray )
[eachLine drawInContext:context];
}
これを必要なものに肉付けする方法を見ることができると思います。
これにアプローチする別の方法は、カレイヤーを使用することです。このアプローチを使用して、内部に描画しないでください - (void)drawrect-まったく - レイヤーを追加して削除し、好きなものを描画すると、ビューはそれらを一緒に構成し、必要に応じて画面に描画します。おそらくあなたが探しているものをもっと。
他のヒント
それが毎回 drawRect
呼ばれている、あなたは空白のスレートから始めます。あなたがそれを再び描くために以前に描いたすべてを追跡しない場合、あなたはあなたの指の最新のスワイプを描くだけでなく、古いもののいずれではありません。毎回それらを再描画するために、すべての指のスワイプを追跡する必要があります drawRect
呼ばれています。
すべての行を再描画する代わりに、画像を描画してから、画像を表示するだけです drawRect:
方法。画像はあなたのために線を蓄積します。もちろん、この方法により、元に戻すのがより困難になります。
uigraphicsbeginimagecontext関数を使用して、新しい画像ベースのグラフィックコンテキストを作成します。このコンテキストを作成した後、画像の内容を描画してから、uigraphicsgetimagefromcurrentimageContext関数を使用して、描いたものに基づいて画像を生成できます。 (必要に応じて、描画を続けて追加の画像を生成することもできます。)画像の作成が完了したら、uigraphicsendimageContext関数を使用してグラフィックコンテキストを閉じます。コアグラフィックを使用することを好む場合は、cgbitmapcontextcreate関数を使用してビットマップグラフィックコンテキストを作成し、画像の内容を描画できます。描画が終了したら、CGBitMapContextCreateImage関数を使用して、ビットマップコンテキストからCGIMAGEREFを作成します。コアグラフィックスイメージを直接描画するか、これを使用してUIImageオブジェクトを初期化できます。