2009-09-01 37 views
2

我正在研究一个主窗口有NSDrawer的应用程序。至关重要的是,抽屉总是在右边打开,这就是我编码它的工作原理。我想知道的是,如果有办法检测抽屉是否会“脱离屏幕”......有没有办法可以检测到这一点?如果是这样,怎么样?此外,如何移动主窗口以调整打开的抽屉宽度?如何检测NSDrawer是否会关闭屏幕

在此先感谢。

尼克

编辑:

下面是解感谢Rob的建议。

-(IBAction)toggleDrawer:(id)sender 
{ 

NSRect screenFrame = [[[NSScreen screens] objectAtIndex:0] visibleFrame]; 
NSRect windowFrame = [window frame]; 
NSRect drawerFrame = [[[drawer contentView] window] frame]; 

if ([drawer state] == NSDrawerOpenState) 
{ 
    [drawer close]; 
} 
else 
{ 
    if (windowFrame.size.width + 
     windowFrame.origin.x + 
     drawerFrame.size.width > screenFrame.size.width) 
    { 
     NSLog(@"Will Open Off Screen"); 

     float offset = (windowFrame.size.width + 
        windowFrame.origin.x + 
        drawerFrame.size.width) - screenFrame.size.width; 

     NSRect newRect = NSMakeRect(windowFrame.origin.x - offset, 
              windowFrame.origin.y, 
              windowFrame.size.width, 
              windowFrame.size.height); 

     [window setFrame:newRect display:YES animate:YES]; 
    } 

    [drawer openOnEdge:NSMaxXEdge];  
} 
} 

回答

4

你可以使用NSScreen的方法来计算是否扩大抽屉的框架将打开关闭屏幕,然后使用-setFrame:显示:动画:从屏幕上移动窗口的必要距离打开抽屉前的边缘。

+1

完美。谢谢。对于任何感兴趣的人,我已经添加了我用于问题的代码。 – nrj 2009-09-01 13:43:33

+0

整洁的解决方案,你们俩!这可能是一个选项,从宽度而不是原点减去'newRect'中的'offset'。 – 2014-07-16 10:04:16