所以我对AppKit和Cocoa(来自UIKit和CocoaTouch)相当新,我正在实现一个折叠NSWindow的界面。在iOS上,这将是相当容易的,但看看我选择询问的OS X有很多细微差别。
您将如何实施以下过渡?
注意:底栏是我的contentView的一部分,而不是OS X提供的底栏。即我的窗口(顺便说一下,INAppStoreWindow)由titleBar和contentView组成。
我想我可以只是折叠contentView并同步调整窗口大小,但是如果我能够在折叠时保留透明度,这是因为透视转换而发生的。即向内弯曲的边应该(在过渡期间)是透明的。或者我是否想过这个?
答案 0 :(得分:2)
首先是坏消息:与UIKit不同,AppKit并没有使用Core Animation来呈现其控件。所有CALayers都在NSView的特殊层托管实例中占据了他们自己的世界。因此,除非您的窗口的内容视图是图层托管,否则您无法将CAAnimations作为整体应用于整个窗口的内容而没有相当程度的hackery(可能会将整个内容视图呈现为位图,将其设置为图层的内容,然后对其执行转换。我不确定。
希望您的内容视图基于Core Animation。如果是这样,您描述的方法应该有效。您还应该能够在透明的无边框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;
}