Swift: SWReavealController 无法滑动关闭菜单 "only open with swipe"

Swift: SWReavealController Can't Swipe to close menu "only open with swipe"

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

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

这是主要的代码 viewcontroller

  @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
    }

}

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

例如,如果您注释掉这段代码

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

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

如果您需要禁用显示视图控制器平移手势,我建议使用 SWRevealViewControllerDelegate 中的委托方法 revealControllerPanGestureShouldBegin: