2012-06-09 49 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上工作的一部分。 –