在我的 OS X 应用程序中,我正在处理需要能够在单独的屏幕之间拖动的自定义窗口项。由于窗口没有标题栏,因此必须手动实现拖动功能。
但是,如果在系统偏好设置中选择了“显示器有单独的空间”选项,我就会遇到问题。
如果它没有被选中,那么我可以毫无问题地在监视器之间移动窗口。如果它被选中,那么除非选择了窗口的底部,否则我无法将窗口从第一台监视器移动到第二台监视器。
我的问题:
1)是否可以检测用户是否选择了“显示有单独的空间”?
2)如果是这样,无论用户在窗口的哪个位置单击鼠标,如何强制窗口成功拖动?
以下是我mouseDragged
方法中的一些代码:
// Moving
NSRect screenVisibleFrame = [[NSScreen mainScreen] visibleFrame];
NSPoint newOrigin = windowFrame.origin;
// Get the mouse location in window coordinates.
// Update the origin with the difference between the new mouse location and the old mouse location.
newOrigin.x += (currentLocation.x - self.initialPoint.x);
newOrigin.y += (currentLocation.y - self.initialPoint.y);
// Don't let window get dragged up under the menu bar (but let it drag ABOVE it onto other screens...)
if ((newOrigin.y + windowFrame.size.height) > (screenVisibleFrame.origin.y + screenVisibleFrame.size.height) && newOrigin.y + windowFrame.size.height <= [[NSScreen mainScreen] frame].origin.y + [[NSScreen mainScreen] frame].size.height) {
newOrigin.y = screenVisibleFrame.origin.y + (screenVisibleFrame.size.height - windowFrame.size.height);
}
// Move the window to the new location
[self setFrameOrigin:newOrigin];
self.isManuallyPositioned = TRUE;