2016-07-02 4 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 개가 있어야합니다. 모든보기에는 동일한 수퍼보기가 있어야합니다.

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

그보기를 표시하는 기능을 추가,

@IBOutlet weak var menuViews: [UIView]! 

당신의 열거입니다, 가정, 스케치, 도움과 각각의 설정과 동일 출구 menuViews에 연결해야합니다

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

관련 문제