1

基本的な NSBezierPath メソッドを使用して、画面上に四角形を描画しています。オブジェクトの各インスタンスを初期化して、画面上にカスタマイズされた四角形を描画するようにオブジェクトを設定しました。そのオブジェクトには、画面上でドラッグされたときにマウスで四角形を移動するメソッドがあります。これを達成するために、私は単にmouseDragged:方法。問題は、それを移動すると、長方形が以前あった場所の端に沿って画面上に1pxの細い線として表示される「画像アーティファクト」が残ることです。これは、Microsoft Windows の実行速度が遅かったときに、ウィンドウをドラッグしたときにウィンドウのゴーストが残っていたのと似ています。フリーズが解除される前に、常に何かを描画したり、画面全体を埋めようとしたりする方法を覚えていますか? 再描画が十分に速くないか何かのようです。アーティファクトは、何かを描画してクリアしない限り (四角形をドラッグして元に戻すなど)、決して消えることはありません。

-(void)mouseDown:(NSEvent *)theEvent{
mouseLoc = [theEvent locationInWindow];
xDifference = mouseLoc.x - origin.x;
yDifference = mouseLoc.y - origin.y;

}

-(void)mouseDragged:(NSEvent *)theEvent{
mouseLoc = [theEvent locationInWindow];
NSPoint adjustedOrigin = NSMakePoint((mouseLoc.x-xDifference), (mouseLoc.y-yDifference));
[self setOrigin:adjustedOrigin];


}

また、青い四角形の左側にある空白の四角について疑問がある場合は、それも説明できません。黒い「ひし形」が直径 30 ピクセルの円を描いて回っていますが、1 スペース (NSTimer では 1 秒に 1 秒) 移動するたびに、その場所に非常に短時間ジャンプしますが、なぜ手がかりがありません。長方形の移動のコードは次のとおりです。

i+=.5;
int rectangle2X = (100+30*cos(i));
int rectangle2Y = (100+30*sin(i));
//NSLog(@"(%d, %d)", rectangle2X, rectangle2Y);
rectangle2.origin = NSMakePoint(rectangle2X, rectangle2Y);

どんな助けでも素晴らしいでしょう。上記のコードがすべてではないことは承知していますので、お気軽にお問い合わせください。上のコードはオブジェクトからのもので、下のコードは AppDelegate からのものです。写真の両方の長方形は、私のオブジェクトのインスタンスです。

アーティファクトの写真

4

1 に答える 1

1

心配しないで、現代アートと呼んでください!

しかし、真剣に。drawRect:ordrawInContext:メソッドでビューをクリアしていないようです。

前の描画をクリアするために最初に行うこととして、境界上に背景色の四角形をペイントします。

[myBGColor set];
NSRectFill([self bounds]);

NSView は自動的にクリアされません。

于 2012-01-30T09:11:18.043 に答える