5

所以我对 AppKit 和 Cocoa(来自带有 CocoaTouch 的 UIKit)相当陌生,我目前正在实现一个折叠 NSWindow 的界面。在 iOS 上,这将相当容易,但看到 OS XI 选择询问的许多微小差异如何。

您将如何实施以下过渡?

窗口折叠

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

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

4

1 回答 1

2

首先是坏消息:与 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;
}
于 2012-06-11T16:49:16.707 回答