2012-06-09 37 views
5

所以我是相当新的了AppKit和可可(从未来的UIKit与CocoaTouch)和我目前正在实现一个接口折叠一个NSWindow一个NSWindow。在iOS上这将是相当容易的,但看到我选择问的OS X有很多微小的差异。“折叠”使用CoreAnimation

你会如何去实现以下转变?

Window Fold

:底部酒吧是我的内容查看的一部分,而不是底部栏OS X提供。即我的窗口(顺便说一句,INAppStoreWindow)由一个titleBar和一个contentView组成。

我想我可能只是折内容查看并同步调整窗口的大小,但它会是最好,如果我能保持透明度,同时其折叠由于透视transfomation发生。即向内弯曲的边应该(在过渡期间)是透明的。或者我是否过度这个?

回答

2

坏消息:不像UIKit中,AppKit的不使用的Core Animation来渲染其控制。所有的CALayers都在NSView的特殊图层托管实例中居住着自己的世界。所以,除非你的窗口的内容视图层托管,你不能申请一个CAAnimations到你的窗口作为一个整体的内容,无需相当程度的两轮牛车的(有可能以使整个内容视图为位图,设置为一个图层的内容,并对其进行转换,我不确定)。

希望你的内容的看法是基于动画的核心。如果是这样,你描述的方法应该工作。您还应该能够将图层放置在透明无边界的NSWindow中,然后对内容视图进行的任何转换都会显示其背后的桌面。这里有一个片段(来自马特龙)应该做你想做的:

- (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; 
} 
+0

是的我的内容视图是基于CoreAnimation的,我意识到这个缺陷。 NSBorderlessWindowMask的问题是,如果我将背景颜色设置为clearColor,系统确实会绘制窗口阴影。当然,我可以继续前进并呈现我自己的,但基本上就像完全绘制自己的窗户一样。我想避免这种情况,因为在OS X的更高版本中可能会更改界面。 – pkluz

+0

您的窗口阴影问题与使用标准控件的问题几乎相同。 AppKit不是由核心动画渲染的,所以它渲染的任何东西都不能使用核心动画。你没有它,或者你自己重新实现它。这很糟糕,我知道。我想这只是在更老的api上工作的一部分。 –