2013-03-05 179 views
1

我試圖在所有屏幕上顯示窗口副本。看到我的代碼如下。它只在主屏幕上正確顯示無邊框窗口。我沒有在任何地方看到其他窗口。所有屏幕上的顯示窗口

該窗口應該顯示從左邊200px和從頂邊200px。

我將origin.x設置爲屏幕高度--300(= 200px間距+窗口本身的高度)。

任何想法我做錯了什麼?

- (void)displayOnAllScreens 
{   
    NSArray *screenArray = [NSScreen screens]; 

    _tempWindows = [[NSMutableArray alloc] init]; 

    if ([screenArray count] == 1) { 
     [self displayOnScreen:[NSScreen mainScreen]]; 
    } else { 
     for (int i=0; i<[screenArray count]; i++) { 
      [self displayOnScreen:[screenArray objectAtIndex:i]]; 
     } 
    } 
} 

- (void)displayOnScreen:(NSScreen *)screen 
{ 
    BOOL isMainScreen = NO; 

    if (screen == [NSScreen mainScreen]) { 
     isMainScreen = YES; 
    } 

    NSRect screenRect = [screen frame]; 

    NSRect frame = NSMakeRect(screenRect.origin.x + 200, screenRect.size.height - 300, 100, 100); 

    NSWindow *_tempWindow; 

    _tempWindow = [[NSWindow alloc] initWithContentRect:frame 
                styleMask:NSBorderlessWindowMask 
                 backing:NSBackingStoreBuffered 
                 defer:NO]; 

    if (isMainScreen) { 
     [_tempWindow setBackgroundColor:[NSColor lightGrayColor]]; 
    } else { 
     [_tempWindow setBackgroundColor:[NSColor redColor]]; 
    } 
     [_tempWindow makeKeyAndOrderFront:NSApp]; 
    [_tempWindow setAlphaValue:0.93]; 

    [_tempWindow setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; 

    [_tempWindows addObject:_tempWindow]; 
} 

回答

2

NSWindow有一個特殊的初始化,指定你想要哪個屏幕上(你實際上只有一個參數了!):

initWithContentRect:styleMask:backing:defer:screen: 

初始化的另一種形式呈現在主屏幕上,這就是爲什麼他們這樣堆積起來。

+0

謝謝,這是訣竅。我還需要將screenRect.origin設置爲NSZeropoint,因爲我現在不再需要相對於主屏幕的原點。 – Wesley 2013-03-05 14:17:42

+0

零像每個屏幕的中心,或像窗口的原點零? – CodaFi 2013-03-05 14:24:19

+0

對不起,您可能認爲這是個問題。這是一個答案。我將screenRect.origin設置爲NSZeroPoint,並使其在每個屏幕上正確定位。 – Wesley 2013-03-05 14:37:42