2017-03-28 52 views
-1

我正在使用Swift 3和SWRevealViewController来创建侧栏菜单应用程序。SWRevealViewController:当后视(菜单)打开时更改Frontview的颜色

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

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

viewWillAppear中的MenuController样子:

覆盖FUNC viewWillAppear中(_动画: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 
} 

它会改变颜色后视但是对于前视图不起作用。 而我想灰色禁用看不只是改变背景颜色。

+0

可以粘贴什么你尝试的看法? – carlos21

回答

0

尝试,这在你的rearVieController类添加到您的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 
} 
+0

viewWillAppear中在MenuController样子:覆盖FUNC viewWillAppear中(_动画:布尔)。{ 打印( “MenuController - viewWillAppear中”) super.viewWillAppear(动画) self.revealViewController()frontViewController.view.isUserInteractionEnabled =假 自我。 revealViewController()。view.addGestureRecognizer(self.revealViewController()。panGestureRecognizer()) self.revealViewController()。frontViewController.view.backgroundColor = UIColor.blue self.revealViewController()。rearViewController.view.backgroundColor = UIColor.gray } – SRM

+0

你可以发布你已经试过的代码吗? –

+0

您的建议帮助我前进。在RearViewController中viewWillAppear和viewWillDisappear,我添加和删除FrontViewController的子视图,但一个小问题。我希望子视图在你点击它时立即消失,现在它保持到前视图控制器屏幕完全显示。在菜单开始向左滑动之前,如何识别轻击或平移手势并删除子视图。非常感谢您的帮助。 – SRM