2

我试图使SWRevealViewController在我的应用程序中工作。SWRevealViewController在打开'snappoint'时关闭'

我所做的是我不希望能够从屏幕上的任何地方打开菜单,所以我改变了所有UIPanGestureRecognizer与​​,所以它只能从屏幕侧面触发。

为了实现这个我也改变了panGestureRecognizer方法。这看起来现在如下

- (UIScreenEdgePanGestureRecognizer*)panGestureRecognizer 
{ 
    if (_panGestureRecognizer == nil) 
    { 
     _panGestureRecognizer = [[SWRevealViewControllerPanGestureRecognizer alloc] initWithTarget:self action:@selector(_handleRevealGesture:)]; 
     _panGestureRecognizer.delegate = self; 
     _panGestureRecognizer.edges = UIRectEdgeLeft; 
     [_contentView.frontView addGestureRecognizer:_panGestureRecognizer]; 
    } 
    return _panGestureRecognizer; 
} 

但是(不知道这种变化是造成我的问题),当我开始从左侧打开菜单,并展开它在那里通常会卡在打开时的点它会重新陷入。

所以我们假设它打开到500px的屏幕。当我拖动它超过500像素时,它会自动关闭菜单。

此外,目前还无法通过刷卡来关闭菜单。我现在所做的是添加一个gesturerecognizer,它将触发revealViewController.revealToggle(animated: true)方法。

有没有人碰巧知道如何解决这个问题?

+0

我不能回答你,因为我不是在我的电脑,但有一种方法,你可以改变多远你必须滑动它关闭,通过.h文件查看方法,我认为该方法有在名字中反弹,但所有的方法都描述了他们所做的事情,只是在那里寻找方法。 – Timmy

+0

@Timmy我会尝试如果我能找到它。我认为那里只有一种方法可以设定到哪一点。当你习惯了迅速的时候阅读目标c。恐怖哈哈 – NoSixties

回答

0

我结束了使用委托方法来与SWRevealViewController我整个代码修复它看起来像这样

​​

self.hideMenuWhentappedAround()可以确保当你轻按UIView的任何地方,菜单将关闭。该方法创建在UIViewController的扩展中,看起来如下所示。

import UIKit 
import SWRevealViewController 

extension UIViewController { 
    func hideMenuWhenTappedAround() { 
     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(SWRevealViewController.dismissMenu)) 
     tap.cancelsTouchesInView = false 
     view.addGestureRecognizer(tap) 
    } 

    func dismissMenu() { 
     self.revealViewController().revealToggle(animated: true) 
    } 
} 
0

进口#import "SWRevealViewController.h

这两个手势可以帮助你打开和关闭SW菜单拖动并点击打开和关闭SW

[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 
[self.view addGestureRecognizer:self.revealViewController.tapGestureRecognizer]; 

打开开关菜单通常

[self.revealViewController revealToggleAnimated:YES]