Swift:SWReavealController不能滑动关闭菜单"只能用滑动打开"

时间:2015-10-08 20:55:32

标签: ios iphone swift uinavigationcontroller swrevealviewcontroller

这是使用SWRevealController的Slideout菜单,它运行完美,但可以滑动打开但不能滑动以关闭菜单

添加库后我做了一些改动,但我确实知道问题出在哪里。

这是主视图控制器中的代码

  @IBOutlet weak var menuButton:UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()



    if self.revealViewController() != nil {
        menuButton.target = self.revealViewController()
        menuButton.action = "revealToggle:"
        self.revealViewController().delegate = self
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

    }


    self.revealViewController().delegate = self
    var swl = self.revealViewController()


    if swl != nil
    {
        swl.panGestureRecognizer()
        swl.tapGestureRecognizer()
    }



}



@IBAction func but_back(sender: AnyObject) {

    self.navigationController?.interactivePopGestureRecognizer!.delegate = self
    self.navigationItem.leftBarButtonItem?.target=self.revealViewController()
    self.navigationItem.leftBarButtonItem?.action=Selector("revealToggle:")
    self.revealViewController().revealToggle(sender)

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}


func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition)
{
    if position == FrontViewPosition.Left     // if it not statisfy try this --> if revealController.frontViewPosition == FrontViewPosition.Left
    {
        self.view.userInteractionEnabled = true
        revealController.panGestureRecognizer().enabled=true
    }
    else
    {
        self.view.userInteractionEnabled = false
        revealController.panGestureRecognizer().enabled=false
    }

}

1 个答案:

答案 0 :(得分:1)

当显示视图控制器前端位置不在revealController:willMoveToPosition:的委托方法实现中的左侧位置时,您似乎正在禁用平移手势识别器以及禁用视图上的用户交互。 1}}。因此,显示视图控制器只能移动到单个位置。您可以更改该代码以允许您需要的其他职位。

例如,如果您注释掉此代码

SWRevealViewControllerDelegate

应该可以防止不必要地禁用平移手势。

如果您需要禁用显示视图控制器平移手势,我建议您使用func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) { if position == FrontViewPosition.Left // if it not statisfy try this --> if revealController.frontViewPosition == FrontViewPosition.Left { self.view.userInteractionEnabled = true revealController.panGestureRecognizer().enabled=true } else { self.view.userInteractionEnabled = false revealController.panGestureRecognizer().enabled=false } } 中的委托方法revealControllerPanGestureShouldBegin: