【问题标题】:How to make my app stay on top of fullscreen apps如何让我的应用保持在全屏应用之上
【发布时间】:2011-09-28 09:34:17
【问题描述】:

我有一个应用程序必须始终保持在其他应用程序之上。 我目前正在使用主窗口的 setLevel 属性,以使其位于其他桌面应用程序之上。

我正在尝试修复我的应用程序,以便它也可以在 Lion 中保持在全屏应用程序之上。 关于如何做到这一点的任何想法?

应用程序委托如下所示:

#import "alwaysOnTopAppDelegate.h"

@implementation alwaysOnTopAppDelegate

@synthesize window;

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

@end

【问题讨论】:

  • 由于全屏模式的重点是专注于一个应用程序而排除所有其他应用程序,我原以为您尝试实现的行为会被大多数全屏应用程序用户认为是不受欢迎的甚至可能无法实施。
  • 行为当然是可选的。应用商店中有一款“员工最爱”的应用具有此功能:itunes.apple.com/dk/app/yoink/id457622435?mt=12
  • 我的立场是正确的,很明显,这不是不可能实施的,甚至在适当的情况下得到苹果的批准。
  • 也许将 NSFloatingWindowLevel 更改为 NSScreensaverWindowLevel?这应该把它放在除了鼠标之外的所有东西的前面。
  • NSScreenSaverWindowLevel 没有完成这项工作:(

标签: objective-c xcode cocoa osx-lion


【解决方案1】:

找到答案:应用委托应如下所示:

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

【讨论】:

    【解决方案2】:

    Yoink 的工作方式很简单: 只需在您的应用程序的 Info.plist 中将“Application is Agent (UIElement)”设置为 YES。这将意味着它不会显示在停靠栏等中,但这对于辅助窗口可能很好(嗯,它是给我的!)。在这种情况下,提供一个菜单栏项可能是有意义的,这样用户就可以轻松地停止应用程序。

    【讨论】:

    • 这并不能让它在狮子的全屏应用程序之上。
    【解决方案3】:

    下面是我的测试代码,它工作正常,希望可以帮助。

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

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2013-06-12
      • 2018-11-09
      • 1970-01-01
      • 2020-09-01
      相关资源
      最近更新 更多