2011-01-31 40 views
6

我來自iOS背景,是Mac OSX(coco應用程序)開發的新手。在Mac應用程序中輕鬆切換「視圖控制器」(類似於iOS)

從蘋果示例代碼項目「Simple Cocoa App」開始,我希望能夠以任何類似於iOS應用程序的方式在不同的「視圖控制器」之間切換,甚至在兩個NSView之間切換。

不幸的是,我找不到一種方法來實現這一點 - 而互聯網相當缺乏與「可視應用程序中的視圖切換,在mac應用程序中切換視圖,mac應用程序開發教程」等關鍵字相關的資源......

做任何你知道一個教程,和這裏的起腳,居然佔地面積的視圖之間切換的事?或者也許知道你可能能夠在Stack Overflow答案中解釋的任何快捷方式?

概念驗證
一個非常簡單的概念證明可以是以下內容。在一個簡單的應用程序中,有兩個視圖 - 屏幕1(當前顯示)和屏幕2(隱藏屏幕外):

步驟1)啓動應用程序,出現屏幕1(包含標籤「屏幕1」和按鈕「 「)
步驟2)按按鈕
步驟3)屏幕1個滑動離屏爲
步驟4)屏幕2個滑動(包含單個標籤 「屏幕2」)

感謝。

回答

16

核心動畫並沒有像OS X那樣深入地集成在OS X中。 因此你需要自己做很多。 你可以做的是使用窗口的contentView作爲超級視圖,然後執行以下操作切換到另一個視圖(動畫)。

- (void)switchSubViews:(NSView *)newSubview 
{ 
    NSView *mainView = [[self window] contentView]; 
    // use a for loop if you want it to run on older OS's 
    [mainView removeAllSubViews]; 

    // fade out 
    [[mainView animator] setAplhaValue:0.0f]; 

    // make the sub view the same size as our super view 
    [newSubView setFrame:[mainView bounds]]; 
    // *push* our new sub view 
    [mainView addSubView:newSubView]; 

    // fade in 
    [[mainView animator] setAlphaValue:1.0f]; 
} 

但是這不會給你想要的效果。如果你想讓它給它一個八九不離十舉動效果,你必須包括QuartzCore.framework並執行以下操作:

- (void)prepareViews 
{ // this method will make sure we can animate in the switchSubViewsMethod 
    CATransition *transition = [CATransition animation]; 
    [transition setType:kCATransitionPush]; 
    [transition setSubtype:kCATransitionFromLeft]; 
    NSView *mainView = [[self window] contentView]; 
    [mainView setAnimations:[NSDictionary dictionaryWithObject:transition forKey:@"subviews"]]; 
    [mainView setWantsLayer:YES]; 
} 

然後在switchSubViews:你只需要使用:

[[mainView animator] addSubView:newSubView]; 
+0

當我使用上面的代碼,在「[mainView removeAllSubViews];」,它顯示以下錯誤...「沒有可見的@interface爲'NSView'聲明選擇器'removeAllSubViews'」。什麼原因 – nbs 2013-04-20 09:46:08

+0

@NidhinBalakrishnan該方法是一個相當新的API,正如我在該行的評論中所述,您將不得不手動刪除所有子視圖(循環訪問子視圖數組並逐個刪除)以獲得所需的效果。 – 2013-04-24 06:48:06

3

你可能想要通過Perspx檢查PXNavigationBar,它可以在更多的iOS中處理你的情況。

相關問題