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:
。
这是使用 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:
。