我使用基本的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];
}
另外,如果你想知道蓝色矩形左边的空白方块,我也无法解释。我的黑色'菱形'在直径为30px的圆圈中四处走动,但每次移动一个空间(NSTimer上每秒一个)它会非常短暂地跳到那个位置,但为什么我没有线索。矩形移动的代码如下:
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。图片中的两个矩形都是我的对象的实例。
答案 0 :(得分:1)
别担心,只需称它为现代艺术!
但是说真的。您似乎没有在drawRect:
或drawInContext:
方法中清除视图。
在边界上绘制背景颜色的矩形作为清除先前绘图的第一步。
[myBGColor set];
NSRectFill([self bounds]);
NSView不会自动清除。