我在一个 View Controller 中有很多 View 在另一个之上,我正在尝试模拟一个标签栏。用户可以点击菜单的任何按钮,将根据点击的按钮显示 View 。所有其他 View 都将隐藏。
我编写了以下代码,它没有正确显示 View (有时显示,有时不显示)。
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
}
}
}
我基本上是在更改 View 的 alpha。假设您想展示主视图。这是层次结构最底部的 View 。我只是隐藏所有 View 。假设我想在层次结构的最顶层显示 View ,即设置 View 。我隐藏所有 View ,然后显示设置 View 。
我该如何解决/更好地解决这个问题?
最佳答案
应该有主页、画板、帮助和设置4个 View 。您所有的 View 都应该具有相同的 super View 。它应该分别连接到与主页、画板、帮助和设置相同的导出菜单 View ,
@IBOutlet weak var menuViews: [UIView]!
这是你的枚举,
enum Views {
case home
case sketchpad
case help
case settings
}
添加函数以显示该 View ,
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
}
}
}
关于ios - 在 iOS 中模拟标签栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162197/