【问题标题】:Swift: SWReavealController Can't Swipe to close menu "only open with swipe"Swift:SWReavealController 无法滑动以关闭菜单“仅通过滑动打开”
【发布时间】:2016-01-06 15:59:58
【问题描述】:

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

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

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

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

}

【问题讨论】:

    标签: ios iphone swift uinavigationcontroller swrevealviewcontroller


    【解决方案1】:

    当显示视图控制器的前端位置不在revealController:willMoveToPosition: 的委托方法实现中来自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
        }
    }
    

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

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

    【讨论】:

    • 您似乎不必要地禁用了平移手势识别器。如果您通过删除该代码或将其注释掉来停止这样做,它是否解决了您的问题?我已经添加了我在回答中提到的代码。
    • 哇,它工作得很好,我浪费了几个小时试图修复它非常感谢你
    • 太棒了。我很高兴能帮上忙。我还想指出,您可能会在 but_back( ) 函数中不必要地添加额外的平移手势识别器。在viewDidLoad: 中添加一次就足够了。
    • 是的,我确实对此发表了评论,但它仍然有效,谢谢兄弟
    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多