2009-09-01 47 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