1

私はOSX 10.7でアプリを開発していますが、最初の画面でアプリを正常に実行する必要があるときに、2番目の画面でいくつかの画像を開くことを目標としています。

したがって、コードは次のとおりです。

NSScreen *screen = [[NSScreen screens] objectAtIndex:1];

fullScreenWindow = [[NSWindow alloc] initWithContentRect:[screenFrame]
                                               styleMask:NSBorderlessWindowMask
                                                 backing:NSBackingStoreBuffered
                                                   defer:NO
                                                  screen:screen];
[fullScreenWindow setLevel: NSMainMenuWIndowLevel + 1];
[fullScreenWindow setOpaque: YES];
[fullScreenWindow setBackgroundColor:[NSColor yellowColor]];

fullScreenView = [[NSView alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, fullScreenWindow.frame.size.width, fullScreenWindow.frame.size.height)];
// Adding a test button
NSButton *testButton = [[NSButton alloc] initWithFrame(50.0f, 50.0f, 100.0f, 50.0f)];
[testButton setTarget:self];
[testButton setAction:@selector(closeExternalWindow)];
[fullScreenView addSubview:testButton];

// Present the fullscreen window
[fullScreenWindow.contentView addSubview:fullScreenView];
[fullScreenWindow makeKeyAndOrderFront:self];

このように、最初の画面ではアプリが正しく表示されますが、2 番目の画面ではフルスクリーンの黒いウィンドウが表示されます。

問題は何ですか?

ありがとう!

4

2 に答える 2

1

それについてAppleのドキュメントを読むinitWithContentRect:styleMask:backing:defer:screen:と、画面パラメータが..

ウィンドウがメイン画面以外の画面に描画される場合、ウィンドウのコンテンツ四角形がどこに描画されるかを指定します。コンテンツの四角形は、画面の左下隅を基準にして描画されます。

したがって、使用[screen frame]するときは、実際には2番目の画面から移動しています。これは、位置がすでにその画面に対して相対的であるためです。

期待どおりの場所に表示するために、コードを次のように変更できます。

[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, [screen frame].size.width, [screen frame].size.height)
                            styleMask:NSBorderlessWindowMask
                              backing:NSBackingStoreBuffered
                                defer:NO
                               screen:screen];
于 2013-03-18T09:13:21.163 に答える
0

数日後、このコードで再び作業する可能性があり、今では動作します:

NSScreen *screen = [[NSScreen screens] objectAtIndex:1];
NSRect mainDisplayRect = [screen frame];
fullScreenWindow = [[NSWindow alloc] initWithContentRect: mainDisplayRect styleMask:NSBorderlessWindowMask
                                                 backing:NSBackingStoreBuffered defer:YES];
[fullScreenWindow setLevel:NSMainMenuWindowLevel+1];
[fullScreenWindow setOpaque:YES];
[fullScreenWindow setHidesOnDeactivate:YES];
[fullScreenWindow setBackgroundColor:[NSColor redColor]];

NSRect viewRect = NSMakeRect(0.0, 0.0, mainDisplayRect.size.width, mainDisplayRect.size.height);
fullScreenView = [[PresenterView alloc] initWithFrame:viewRect];
[fullScreenWindow setContentView: fullScreenView];
[fullScreenWindow makeKeyAndOrderFront:self];

ジェイさん、ご支援ありがとうございます ;)

于 2013-03-25T13:40:27.650 に答える