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
}
我正在使用 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
}