Как определить, будет ли NSDrawer открываться за пределами экрана? - PullRequest
2 голосов
/ 01 сентября 2009

Я работаю над приложением, главное окно которого имеет NSDrawer. Крайне важно, чтобы ящик всегда открывался на правом краю, и именно так я его кодировал, чтобы он работал. Я хотел бы знать, есть ли способ определить, будет ли ящик открываться «за пределами экрана» ... Есть ли способ, которым я могу это обнаружить? Если так, то как? И дополнительно, как я могу переместить главное окно, чтобы отрегулировать ширину открываемого ящика?

Заранее спасибо.

Ник

EDIT:

Вот решение, предложенное Робом.

-(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];     
}
}

1 Ответ

4 голосов
/ 01 сентября 2009

Вы можете использовать методы NSScreen, чтобы вычислить, будет ли рама развернутого ящика открываться вне экрана, а затем использовать -setFrame: display: animate: перед тем, как открыть выдвижной ящик.

...