gpt4 book ai didi

cocoa - 如何在 NSWindow 全屏模式下显示模式表,而不需要视觉上移动主窗口?

转载 作者:行者123 更新时间:2023-12-03 17:49:24 24 4
gpt4 key购买 nike

Objective-C 桌面 Cocoa ap。该应用程序是一种高度特定的边缘情况(具有一键界面的独立信息亭)。我首先提到这一点是为了避免 HIG 讲座。 ;)

我正在使用模态工作 TableView 在常用内容之上显示 PDF 文档。代码很简单:

[docViewerHostWindow beginSheet:docViewer completionHandler:nil];

DocViewerHostWindow 是一个 NSWindow,作为调用工作表的 NSView 的父级进行访问。如果重要的话,“docViewer”是包含 PDFView 的 NSWindow 的子类。

当应用程序在窗口中运行时,一切都会正常运行。当应用程序全屏运行时,一切都会像宣传的那样工作,但存在视觉故障:模型后面的整个内容会向右移动,直到工作表被关闭。看来这是故意的(并且是动画的),但我无法弄清楚它来自哪里或如何禁用它。

我这样进入全屏:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO],NSFullScreenModeAllScreens,nil];

[self enterFullScreenMode:[NSScreen mainScreen] withOptions:options];

这个基本的 NSLog 说明了问题:

NSLog(@"Before: %f,%f",docViewerHostWindow.frame.origin.x,docViewerHostWindow.frame.origin.y);

[docViewerHostWindow beginSheet:docViewer completionHandler:nil];

NSLog(@"After: %f,%f",docViewerHostWindow.frame.origin.x,docViewerHostWindow.frame.origin.y);
<小时/>
**Log when running windowed (same origin before and after) **
2015-08-09 22:52:46.641 Before: 311.000000,491.000000
2015-08-09 22:52:47.050 After: 311.000000,491.000000
<小时/>
**Log when running fullscreen (origin shifts in fullscreen) **
2015-08-09 22:52:46.641 Before: 0.000000,0.000000
2015-08-09 22:52:47.050 After: 80.000000,-23.000000

我尝试在打开工作表之前和之后强制窗口的原点,但这没有帮助。我什至不知道该去哪里寻找 - 关于造成这种情况的原因以及原因有任何线索吗?

<小时/>

更新:要明确的是,我不是在谈论工作表本身的默认动画(如this question中所述),而是这是发生在主机窗口上的事情,但仅限于全屏.

最佳答案

看到的效果是应用程序移出了(不可见的)停靠栏和菜单栏(感谢@KenThomases,他的评论帮助解决了这个问题)。除了上面接受的答案之外,我找到了另一个解决方案:

Apple 提供了许多 kiosk mode tricks这在这里很有帮助,特别注意他们关于通过向 awakeFromNib 添加代码来隐藏菜单栏和停靠栏的示例。

但是,这在非信息亭应用程序中不太理想,我们希望仅在全屏模式下提供信息亭选项。幸运的是,可以通过将选项传递给 EnterFullScreenMode:withOptions: 来实现这一点。当我们退出FullScreenMode:withOptions 时,常规演示模式选项将恢复

文档有点单薄,但这做到了:

NSApplicationPresentationOptions kioskOptions = NSApplicationPresentationHideDock + NSApplicationPresentationHideMenuBar;

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO],NSFullScreenModeAllScreens,
[NSNumber numberWithInteger:kioskOptions],NSFullScreenModeApplicationPresentationOptions, nil];

[self enterFullScreenMode:[NSScreen mainscreen] withOptions:options];

关于cocoa - 如何在 NSWindow 全屏模式下显示模式表,而不需要视觉上移动主窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31908883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com