我创建了一个名为Uberlayer的应用。用户可以使用此单一用途的Mac应用程序在其他应用程序之上叠加图像。
我正在使用setMovableByWindowBackground
来启用拖动整个窗口的背景。
我想做一点改进,因为应用程序现在你不能拖动窗口高于菜单栏,这可能有点烦人。使用普通窗口,我可以想象将它锁定到菜单栏是一件好事,但对于这个用例,能够将它拖得更高是一件好事。
任何人都知道如何更改此默认窗口行为?
答案 0 :(得分:3)
而是使用-setMovableByWindowBackground:
覆盖-mouseDown:
这样的事件:
- (void)mouseDown:(NSEvent *)event
{
NSPoint originalMouseLocation = [window convertBaseToScreen:[event locationInWindow]];
NSRect originalFrame = [window frame];
while (YES)
{
NSEvent *newEvent = [window nextEventMatchingMask:(NSLeftMouseDraggedMask | NSLeftMouseUpMask)];
if ([newEvent type] == NSLeftMouseUp)
{
break;
}
NSPoint newMouseLocation = [window convertBaseToScreen:[newEvent locationInWindow]];
NSPoint delta = NSMakePoint(
newMouseLocation.x - originalMouseLocation.x,
newMouseLocation.y - originalMouseLocation.y);
NSRect newFrame = originalFrame;
newFrame.origin.x += delta.x;
newFrame.origin.y += delta.y;
[window setFrame:newFrame display:YES animate:NO];
}
}
**不要忘记隐藏窗口的标题栏(选择窗口 - >转到属性检查器 - >取消选中标题栏 )因为它的窗口不能高于菜单栏。或者其他解决方案是创建无边框窗口。
答案 1 :(得分:0)
我只是加入贾斯汀的答案。您需要在使用Justin的-mouseDown:
代码时设置其级别。
[window setLevel:NSMainMenuWindowLevel];
如果窗口级别低于NSMainMenuWindowLevel
,则无效。
如果您希望窗口位于状态栏上方,可以将其设置为NSStatusWindowLevel
。