1

iOSでペイントアプリケーションを作成しています。ここでロジックの概要を簡単に説明します。

1.ビットマップ
を初期化します。2.touchBeganまたはtouchMovedイベントが検出されるたびに、ビットマップ上のその位置に塗りつぶされたCGRectを描画し、ビットマップを画面に描画します。

少しの問題を除いて完全に動作します。シミュレーターでマウスを非常に速く動かすと、連続したストロークが得られません。その単なる一連の切断されたCGRects。iOSではタッチイベントが16ミリ秒ごとにのみ発生することを示した調査を行いましたが、マウスをそれほど速く動かしているとは思いません。それで、シミュレーターまたは私のコードの問題はありますか?

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{    

       CGPoint touchPoint=[touch locationInView:self];

       CGContextFillRect (currentBitmap, CGRectMake (touchPoint.x -8 , touchPoint.y - 8   , rectangularBrushSize, rectangularBrushSize ));

       [self setNeedsDisplay]; //draw currentBitmap to screen

}

touchesMovedのコードは同じです。draw rectメソッドは、currentBitmapを画面に描画します。中速でマウスを動かしたときに完全に機能することをもう一度追加したいと思います。

4

2 に答える 2

2

お絵かきアプリを使って作ってみてください。そうしないと、線が滑らかに見えませんCGContextMoveToPointCGContextAddLineToPoint

*この方法でアプリを作成しましたが、問題はありませんでした。

于 2012-09-07T09:54:14.657 に答える
1

それは正常です。おそらく、コードやシミュレーターに問題はありません。現在のマウス/指の位置に長方形を描画する代わりに、(インスタンス変数に) 最後の位置を記憶し、現在の位置と線で接続する必要があります。

touchesBegan

lastPosition = [[touches anyObject] locationInView:self];

touchesMoved

currentPosition = [[touches anyObject] locationInView:self];
CGContextMoveToPoint(context, lastPosition);
CGContextAddLineToPoint(context, currentPosition);
// Draw the line with the desired color and width here.
lastPosition = currentPosition;
于 2012-09-07T09:51:20.077 に答える