SWRevealViewController:打开后视图(菜单)时更改前视图的颜色

SWRevealViewController: Change color of frontview when rearview(menu) is open

我正在使用 Swift 3 和 SWRevealViewController 创建侧边栏菜单应用程序。

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

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

MenuController 中的 viewWillAppear 看起来像:

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.gray
}

它改变了后视图的颜色,但对前视图不起作用。 而且我想要灰色禁用的外观而不仅仅是改变背景颜色。

尝试将其添加到您的 rearVieController 中的 viewWillAppear 方法中 class

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
}