gpt4 book ai didi

cocoa - 如何使我的应用程序从 Finder 图标展开/折叠到 Finder 图标?

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

您知道,有时当您关闭 Finder 窗口或文档时,它会缩小到 Finder 中的显示位置。我希望我的应用程序也能够做到这一点。有这方面的API吗?我找不到。

Imgur

最佳答案

执行摘要:如果您想要这种行为,请使用 NSDocument 系统。

详细信息:

您似乎在 GIF 中使用了 TextEdit。碰巧,Apple publishes the source code for TextEdit as sample code 。所以我们可以看看它是否做了什么特殊的事情来实现这一点。

我在 TextEdit 源代码中找不到任何内容。我研究了一段时间并设置了一些断点,但没有找到任何证据表明 TextEdit 是“手动”执行此操作的。

我发现,如果您使用"file">“打开”(而不是在 Finder 中双击该文件)打开该文件,您不会获得动画关闭窗口,即使该文件可见在 Finder 中。

但是,如果您使用"file">“打开”打开文件,然后(不关闭该窗口)在 Finder 中双击该文件,您就会获得动画关闭窗口。

所以我又仔细研究了一下,设置断点并查看反汇编程序列表,然后我在 -[NSWindow _close] 中找到了我认为重要的部分。它基本上是这样的:

- (void)_close {
if (!_wFlags.windowDying) { return };
if (_auxiliaryStorage->_auxWFlags.windowClosed) { return; }

void (^actuallyCloseMyself)() = ^{ ... code to actually close the window ... };

NSWindowController *controller = self.windowController;
if (![controller respondsToSelector:@selector(document)]) { goto noCloser; }
NSDocument *document = controller.document;
if (![document respondsToSelector:@selector(fileURL)]) { goto noCloser; }
QLSeamlessDocumentCloser *closer = [[NSDocumentController _seamlessDocumentCloserClass] seamlessDocumentCloserForURL:document.fileURL];
if (closer == nil) { goto noCloser; }
CGRect frame = NSRectZero;
[closer closeWindow:self contentFrame:&frame withBlock:actuallyCloseMyself];
goto done;

noCloser:
actuallyCloseMyself();

done:
_auxiliaryStorage->_auxWFlags.wantsHideOnDeactivate = YES;
}

所以基本上,如果您的窗口附加到 NSWindowController,并且该 Controller 有一个 NSDocument,那么 AppKit 将尝试使用QSeamlessDocumentCloserQL 前缀意味着它是 QuickLook 的一部分(该类实际上可以在 QuickLookUI 框架中找到,而 QuickLookUI 框架是 Quartz 框架的一部分)。

我猜发生的情况是,当您在 Finder 中打开文件时,Finder 会告诉 QuickLook 系统(可能是quicklookd 进程)它在屏幕上的哪个位置显示该文件的图标。当调用关闭器时(在 TextEdit 中),如果 QuickLook 有一个要关闭的框架,它会在实际关闭窗口之前将窗口动画化到该框架。如果您没有通过 Finder 打开文件,QuickLook 就没有动画框架,因此它可能只是立即调用 actuallyCloseMyself block 。

关于cocoa - 如何使我的应用程序从 Finder 图标展开/折叠到 Finder 图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48426084/

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