2016-07-02 1 views
0

ビューコントローラーの別のビューの上に複数のビューがあり、タブバーをシミュレートしようとしています。ユーザはメニューの任意のボタンをタップすることができ、どのボタンがタップされたかに応じてビューが提示される。その他のビューはすべて非表示になります。iOSのタブバーをシミュレートする

私は以下のコードを書いていますが、正しく表示されません(表示されることもあれば表示されないこともあります)。

presentViewWithName(.home) // this will present the view at the very bottom of the hierarchy 

enum Views { 
    case home 
    case sketchpad 
    case help 
    case settings 
} 

func presentViewWithName(name: Views) { 
    self.turnAlphaOnToEveryMenuButton() 
    switch name { 
    case .home: 
     self.hideAllViews() 
     self.menuView.buttonHome.dimmerAlpha() 
    case .sketchpad: 
     self.sketchpadView.animateToggleAlpha() 
     self.menuView.buttonSketchpad.dimmerAlpha() 
    case .help: 
     self.helpView.animateToggleAlpha() 
     self.menuView.buttonHelp.dimmerAlpha() 
    case .settings: 
     self.settingsView.animateToggleAlpha() 
     self.menuView.buttonSettings.dimmerAlpha() 
    } 
} 

func turnAlphaOnToEveryMenuButton() { 
    self.menuView.buttonHome.alpha = 1 
    self.menuView.buttonSketchpad.alpha = 1 
    self.menuView.buttonHelp.alpha = 1 
    self.menuView.buttonSettings.alpha = 1 
} 

func hideAllViews() { 
    self.settingsView.alpha = 0 
    self.sketchpadView.alpha = 0 
    self.helpView.alpha = 0 
} 

extension UIView { 
    func animateToggleAlpha() { 
     UIView.animateWithDuration(0.25) { 
      self.alpha = self.alpha == 1 ? 0 : 1 
     } 
    } 

    func dimmerAlpha() { 
     UIView.animateWithDuration(0.25) { 
      self.alpha = self.alpha == 1 ? 0.4 : 1 
     } 
    } 
} 

私は基本的にビューのアルファを変更しています。ホームビューを提示したいとします。これは、階層の最下部にあるビューです。私はすべてのビューを隠すだけです。階層の一番上、つまり設定ビューにビューを表示したいとします。すべてのビューを非表示にしてから、設定ビューを表示します。

どうすればこの問題を解決できますか?

答えて

2

ホーム、スケッチパッド、ヘルプ、設定の4つのビューが必要です。すべてのビューに同じスーパービューが必要です。それは、これはあなたの列挙型である

@IBOutlet weak var menuViews: [UIView]! 

、家庭、スケッチブック、助け、それぞれの設定と同じ出口menuViewsに接続する必要があり、

enum Views { 
    case home 
    case sketchpad 
    case help 
    case settings 
} 

は、そのビューを表示する

func presentViewWithName(name: Views) { 
    UIView.animateWithDuration(0.25) { 
     for (index, view) in menuViews.enumerate() { 
      let alpha = (name == (Views(rawValue: index)!)) ? 1.0 : 0.0 
      view.alpha = alpha 
     } 
    } 
} 
+0

を機能を追加します素敵な答え、良いもの – Fattie

関連する問題