因此,我对AppKit和Cocoa还是比较陌生(来自UIKit和CocoaTouch),并且当前正在实现折叠NSWindow的接口(interface)。在iOS上,这相当容易,但是我发现我想问的是与OS X的细微差别。

您将如何实现以下过渡?

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

我想我可以只折叠contentView并同步调整窗口大小,但是如果我能够在折叠时保留透明性(由于透视变形而发生),那将是更好的选择。 IE。向内弯曲的侧面(在过渡过程中)应该是透明的。还是我想得太多?

最佳答案

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

希望您的内容 View 基于Core Animation。如果是这样,您描述的方法应该行得通。您还应该能够将图层托管在透明的无边界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/

10-13 09:36