【问题标题】:SWRevealViewController: Change color of frontview when rearview(menu) is openSWRevealViewController:后视图(菜单)打开时更改前视图的颜色
【发布时间】:2017-08-22 03:10:34
【问题描述】:

我正在使用带有 SWRevealViewController 的 Swift 3 来创建侧边栏菜单应用程序。

后视图(菜单)打开时如何控制前视图的颜色? 我想显示灰色(如禁用/透明)。 到目前为止,我尝试的任何方法都没有奏效,也无法在线找到直接的解决方案。 我可以控制后视颜色,但不能控制前视。

到目前为止,我已经尝试在后视图控制器的 viewWillAppear 中更改前视图颜色。

在 MenuController 中的 viewWillAppear 看起来像:

覆盖 func viewWillAppear(_ animated: Bool) {

print("MenuController - viewWillAppear")
super.viewWillAppear(animated)
self.revealViewController().frontViewController.view.isUserInteractionEnabled = false
self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().frontViewController.view.backgroundColor = UIColor.blue
self.revealViewController().rearViewController.view.backgroundColor = UIColor.gray
}

它会改变后视图的颜色,但不适用于前视图。 而且我希望灰色的禁用外观不仅仅是更改背景颜色。

【问题讨论】:

  • 您可以粘贴您尝试的内容吗?

标签: ios swift swrevealviewcontroller


【解决方案1】:

尝试将其添加到您的后视图控制器类中的 viewWillAppear 方法中

revealViewController.frontViewController.view.backgroundColor = UIColor.blue //Set colour to what ever you want

所以它应该是这样的

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    revealViewController.frontViewController.view.backgroundColor = UIColor.blue
}

编辑:

好的,我已经尝试过这样做,它似乎有效

如果您创建一个新的 UIView 并将其添加到 frontViewController 中,然后在视图消失时将其删除。

var view: UIView?

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    //Create the view the same size as your frontViewController
    view = UIView(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(revealViewController.view.frame.size.width), height: CGFloat(revealViewController.view.frame.size.height)))
    //Set the colour of the view to whatever you like
    view?.backgroundColor = UIColor.blue
    //Add the new view to the frontViewcontroller
    revealViewController.frontViewController.view.addSubview(view!)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    //Remove the view from the frontViewController
    view?.removeFromSuperview()
}

编辑:

如果您向 UIView 添加点击手势,则在点击功能中删除视图而不是 viewWillDisappear

var view: UIView?

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    //Create the view the same size as your frontViewController
    view = UIView(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(revealViewController.view.frame.size.width), height: CGFloat(revealViewController.view.frame.size.height)))
    //Set the colour of the view to whatever you like
    view?.backgroundColor = UIColor.blue
    //Add a tap gesture to the UIview
    let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
    view?.addGestureRecognizer(tap)
    //Add the new view to the frontViewcontroller
    revealViewController.frontViewController.view.addSubview(view!)
}

func handleTap(_ sender: UITapGestureRecognizer) {
    //Remove the view from the frontViewController
    view?.removeFromSuperview()
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    //Moved the remove to the tap gesture function
}

【讨论】:

  • viewWillAppear in MenuController 看起来像: override func viewWillAppear(_ animated: Bool) { print("MenuController - viewWillAppear") super.viewWillAppear(animated) self.revealViewController().frontViewController.view.isUserInteractionEnabled = false self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) self.revealViewController().frontViewController.view.backgroundColor = UIColor.blue self.revealViewController().rearViewController.view.backgroundColor = UIColor。灰色 }
  • 您的建议帮助我前进。在 RearViewController viewWillAppear 和 viewWillDisappear 中,我正在添加和删除 FrontViewController 的子视图,但这是一个小问题。一旦你点击它,我希望 subView 消失,现在它会一直保持到前视图控制器屏幕完全显示。如何在菜单开始向左滑动之前识别点击或平移手势并删除子视图。非常感谢您的帮助。
  • 我更新了我的答案,希望能解决你的问题。
  • 感谢卢克的指导。我委托了 SWRevealViewController 的 willMoveTo 函数并在那里删除了子视图。我想没关系。我还发现我也可以通过这种方式创建子视图:view = UIView(frame:revealViewController.view.frame)。干杯!!!
  • 没关系,很高兴为您提供帮助 :)
猜你喜欢
  • 2017-01-19
  • 2016-06-02
  • 2015-07-03
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2015-07-01
相关资源
最近更新 更多