用户点击我的应用程序中的“在10秒内截取屏幕截图”按钮。然后用户关注另一个应用程序并使其全屏显示。当用户专注于这个全屏幕应用程序时,我的10秒计时器现在达到0.我的应用程序打开一个完整大小的监视器窗口,它在其上绘制屏幕截图。但现在我希望窗口显示在所有空间上。我试过这个:
[window setCollectionBehavior:(16 | 1 | 256)];
但它不是让窗口显示在用户当前空间(这是全屏应用程序)你们知道吗?
只是为了验证,这些常量的神奇数字是:
var NSWindowCollectionBehaviorStationary = 1 << 4; // 16
var NSWindowCollectionBehaviorCanJoinAllSpaces = 1 << 0; // 1
var NSWindowCollectionBehaviorFullScreenAuxiliary = 1 << 8; // 256
var NSWindowCollectionBehaviorMoveToActiveSpace = 1 << 1;// 2
这是对的吗?我是通过ctypes这样做的,所以必须使用魔术数字。
我也尝试过:
[window setCanBeVisibleOnAllSpaces:YES]
但它没有用。
由于
编辑: 所以这个窗口已经打开,我没有访问故事板等,如下面a2的答案所述,我们在聊天中进行了讨论,我们需要以某种方式勾选它以使其生效,是否有人有任何想法?
答案 0 :(得分:1)
您需要在您的NSWindowController
子类-windowDidLoad
方法中的xib / storyboard中添加此代码,或者在NSWindow
子类的指定初始值中添加:
- (void) awakeFromNib {
[self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
}
OR
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)styleMask
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag {
if (self = [super initWithContentRect:contentRect styleMask:styleMask backing:bufferingType defer:flag]) {
[self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
}
return self;
}
如果你有NSWindowController
- (void)windowDidLoad {
[super windowDidLoad];
[[self window] setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
}
或编辑nib文件并将此行为添加到XCode中的窗口。