2011-09-28 101 views
10

我有一個應用程序,它必須始終保持在其他應用程序之上。 我目前使用主窗口的setLevel屬性來保持它在其他桌面應用程序之上。如何讓我的應用程序停留在全屏應用程序之上

我正在嘗試修復我的應用程序,以便它還可以保持在Lion中的全屏應用程序之上。 關於如何做到這一點的任何想法?

應用程序委託是這樣的:

#import "alwaysOnTopAppDelegate.h" 

@implementation alwaysOnTopAppDelegate 

@synthesize window; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [window setLevel:NSFloatingWindowLevel]; 
} 

@end 
+3

由於全屏模式整點是專注於一個適用於所有其他人的排斥,我還以爲你是試圖執行行爲將受最全屏幕應用程序的用戶,它被認爲是不可取甚至可能無法實施。 – JeremyP

+1

行爲當然是可選的。在應用商店中有一個「工作人員最喜歡的」應用程序,它具有以下功能:http://itunes.apple.com/dk/app/yoink/id457622435?mt=12 –

+0

我認爲這是正確的,顯然,這不是不可能實現甚至在正確的情況下得到了蘋果公司的批准。 – JeremyP

回答

6

找到了答案:應用程序委託應該是這樣的:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [window setLevel:kCGMainMenuWindowLevel-1]; 
    [window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary]; 
} 
3

是Yoink的工作方式很簡單: 只需設置「應用程序代理(的UIElement)」爲YES在Info.plist中爲您的應用。這將意味着它不會顯示在碼頭等等,但這對輔助窗口來說可能是好的(嗯,它對我來說!)。在這種情況下提供菜單欄項目可能很有意義,這樣用戶可以輕鬆停止應用程序。

+0

這不會使它保持在獅子全屏應用程序之上。 –

0

遵循的是我的測試代碼,它工作正常,希望能有所幫助。

NSPanel *test_panel = [[NSPanel alloc] initWithContentRect:NSMakeRect(300, 300, 500, 500) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES]; 
[test_panel setReleasedWhenClosed:YES]; 
[test_panel setHidesOnDeactivate:NO]; 
[test_panel setFloatingPanel:YES]; 
[test_panel setStyleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask]; 
[test_panel setLevel:kCGMainMenuWindowLevel-1]; 
[test_panel setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary]; 
[test_panel setCanBeVisibleOnAllSpaces:YES]; 
[test_panel center]; 
[test_panel orderFront:nil]; 
相關問題