我正在使用基本的 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 像素的圆圈中旋转,但每次它移动一个空间(在 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。图片中的两个矩形都是我的对象的实例。