2013-06-18 26 views
0

enter image description here使這種觀點出現在每個視圖,應用

這是一個「幕」從我的導航欄垂下內。

我該如何將此視圖作爲覆蓋所有視圖的應用程序的覆蓋層? 我必須能夠將圖像添加到這個疊加的子視圖

+0

我可能會擴展一個'UIView'並擴展該視圖的所有其他視圖。 – Rob

回答

0

可以達到所需的與下面的步驟 -

1)創建的UINavigationController擴展如。 UINavigationControllerWithCurtain

2)覆蓋initWithCoder如果你正在構建導航用XIB1否則initWithRootController和超過navigationcontroller's視圖即self.view本身在構造函數中添加幕的自定義視圖。

3)你需要重寫pushViewController方法,以便在頂部設置自定義視圖幕最層,添加以下 -

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
[super viewController:viewController animated:animated]; 
[self.view bringSubviewToFront:customCurtainView]; 
} 
-2
  1. 創建自定義UIView(姑且稱之爲curtainView) 。
  2. 無論您打算如何使用您的視圖(initWithCoder:,如果它們是從XIB或StoryBoard加載的),請將代碼創建爲'curtain'子視圖。
  3. 在此自定義curtainView類中,添加用於引用窗簾子視圖的屬性。
  4. 使curtainView的所有UIView s(不是UIViewController s)的子類。
  5. Voila!
+0

這意味着你將有許多不同的'CurtainView'實例,每個視圖控制器都有一個實例。例如,如果將控制器推到導航堆棧上,則會有一個「CurtainView」滑塊放置到另一個之上。我不確定這是OP尋找的效果 - 他可能更喜歡有一個無所不在的視圖實例。 – Caleb

1

只需將添加到您的應用程序的關鍵窗口。這將覆蓋一切。

[[[UIApplication sharedApplication] keyWindow] addSubview:curtainView]; 

我用這個方法來呈現全屏幕進度指示器覆蓋(一個單實際上)在一些活動中阻止用戶界面,而不管上下文的。


請注意,它是一個UIWindow沒有界面的方向,它總是與設備對齊,所以旋轉UI是值得你必須處理,如果要這樣(這實際上表明,這是不是最好的設計)。

+0

這是一個有趣的想法,但你是對的 - 可能不是一個理想的設計。我認爲在管理內容的視圖控制器層次結構體系內工作會更好。在過去,你可能是最簡單的方法,但現在我們可以編寫我們自己的容器視圖控制器,我認爲它提供了一個更清潔的設計。 – Caleb

+0

無論何時,這種設計從來都不是一個好的解決方案。 :D這僅僅是一個短期的單線解決方案。 – Geri

1

我認爲獲得所需效果的最佳方法是create your own custom container view controller。這可讓您將其他視圖控制器作爲自定義視圖控制器的子項託管,因此您可以隨時在屏幕上顯示一個「幕」,即使它下面的內容發生更改。

一些優勢,相比其他解決方案的自定義視圖控制器是:

  • 簡潔的設計:沒有在應用程序中的其他視圖或視圖控制器需要擔心的帷幕
  • 單個實例:大幕將在視圖控制器過渡留在原地
  • 幹:似乎適合很好地與「不重複自己」的理念
相關問題