首先是坏消息:与 UIKit 不同,AppKit 不使用 Core Animation 来呈现其控件。所有的 CALayer 都在 NSView 的特殊层托管实例中居住在他们自己的世界中。因此,除非您的窗口的内容视图是图层托管的,否则您不能在没有相当程度的黑客攻击的情况下将 CAAnimations 应用于整个窗口的内容(可能会将整个内容视图呈现为位图,将其设置为图层的内容,并对其执行转换。我不确定)。
希望您的内容视图是基于核心动画的。如果是这样,您描述的方法应该有效。您还应该能够将图层托管在透明的无边框 NSWindow 中,然后您对内容视图所做的任何转换都会显示其后面的桌面。这是一个应该做你想做的事情的片段(来自 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;
}