我创建了一个可拖动的 NSWindow,可以通过它的内容进行拖动。它没有标题栏(无边框)。
拖动工作正常,但每隔一段时间就会出现闪烁。似乎窗口正在快速转到某个错误位置,然后返回到鼠标所在的位置(仍然按住鼠标)。它在我的 macbook 上似乎也比在我的 imac 上更好。
谁能弄清楚我做错了什么?
在初始化中,我调用了这两种方法:
[self setMovableByWindowBackground:YES];
[self setMovable:YES];
这些是使用的变量:
NSPoint currentLocation;
NSPoint newOrigin;
int offsetX,offsetY;
这是有关拖动的代码:
- (void)mouseMoved:(NSEvent *)theEvent{
}
- (void)mouseDown:(NSEvent *)theEvent{
currentLocation = [self convertBaseToScreen:[self mouseLocationOutsideOfEventStream]];
offsetX = currentLocation.x - [self frame].origin.x;
offsetY = currentLocation.y - [self frame].origin.y;
}
- (void)mouseDragged:(NSEvent *)theEvent{
currentLocation = [self convertBaseToScreen:[self mouseLocationOutsideOfEventStream]];
newOrigin.x = currentLocation.x - offsetX;
newOrigin.y = currentLocation.y - offsetY;
[self setFrameOrigin:newOrigin];
}
编辑:好的,如上所述,这是一个透明的无边框 NSPanel。是的,我似乎不需要上面的代码。
但是,我确实需要拖动窗口的位置,并且我需要它不断。
如果我像这样得到框架原点:
self.frame.origin
这报告了一个不正确的数字。可可更新这个内部值似乎需要一些时间。
其次,面板是非激活的。在第一次加载(聚焦)并调用 mouseDragged 时移动它时效果很好。但不是当我与另一个应用程序交互然后返回时。只有 mouseDown 和 mouseUp 被调用。