2

メインウィンドウに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

1 に答える 1

4

NSScreenのメソッドを使用して、展開されたドロワーのフレームが画面外で開くかどうかを計算し、-setFrame:display:animate:を使用して、ドロワーを開く前にウィンドウを画面の端から必要な距離だけ移動できます。

于 2009-09-01T07:57:43.450 に答える