gpt4 book ai didi

macos - "Fold"使用 CoreAnimation 的 NSWindow

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

所以我对 AppKit 和 Cocoa(来自带有 CocoaTouch 的 UIKit)相当陌生,我目前正在实现一个折叠 NSWindow 的界面。在 iOS 上,这相当容易,但我选择询问与 OS X 有很多细微差别。

您将如何实现以下过渡?

Window Fold

注意:底部栏是我的 contentView 的一部分,而不是 OS X 提供的底部栏。 IE。我的窗口(顺便说一下 INAppStoreWindow)由 titleBar 和 contentView 组成。

我想我可以只折叠 contentView 并同步调整窗口大小,但如果我能够在折叠时保持透明度,这是由于透视变换而发生的。 IE。向内弯曲的侧面应该(在过渡期间)是透明的。还是我想多了?

最佳答案

首先是坏消息:与 UIKit 不同,AppKit 不使用 Core Animation 来呈现其控件。所有的 CALayer 都在 NSView 的特殊层托管实例中居住在他们自己的世界中。因此,除非您的窗口的内容 View 是图层托管的,否则您不能在没有相当程度的黑客攻击的情况下将 CAAnimations 应用于整个窗口的内容(可能会将整个内容 View 呈现为位图,将其设置为图层的内容,并对其执行转换。我不确定)。

希望您的内容 View 是基于核心动画的。如果是这样,您描述的方法应该有效。您还应该能够将图层托管在透明的无边框 NSWindow 中,然后您对内容 View 所做的任何转换都会显示其后面的桌面。这是一个应该做你想做的事情的片段(来自 Matt Long):

 - (id) initWithContentRect: (NSRect) contentRect
styleMask: (unsigned int) aStyle
backing: (NSBackingStoreType) bufferingType
defer: (BOOL) flag
{
if (![super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: bufferingType
defer: flag]) return nil;
[self setBackgroundColor: [NSColor clearColor]];
[self setOpaque:NO];

return self;
}

关于macos - "Fold"使用 CoreAnimation 的 NSWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10962581/

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