Swift SWRevealViewController与UISlider冲突

Swift SWRevealViewController与UISlider冲突,swift,uislider,uipangesturerecognizer,swrevealviewcontroller,Swift,Uislider,Uipangesturerecognizer,Swrevealviewcontroller,我目前正面临一个问题,试图在我的一个视图中委托SWRevealViewController PangestureRecognitor方法 当我滑动我的UISlider时,panGesture会插入并打开侧菜单来移动滑块 我试着授权panGesture,它运行得很好,但是如果我退出我的视图,转到另一个视图,panGesture就不再运行了,我也无法从第二个视图中显示我的侧菜单 我的代码: class Search : UIViewController, UIGestureRecognizerDel

我目前正面临一个问题,试图在我的一个视图中委托SWRevealViewController PangestureRecognitor方法

当我滑动我的UISlider时,panGesture会插入并打开侧菜单来移动滑块

我试着授权panGesture,它运行得很好,但是如果我退出我的视图,转到另一个视图,panGesture就不再运行了,我也无法从第二个视图中显示我的侧菜单

我的代码:

class Search : UIViewController, UIGestureRecognizerDelegate{

@IBOutlet weak var sliderprice: UISlider!

 override func viewDidLoad() {
    super.viewDidLoad()
     self.revealViewController().panGestureRecognizer().delegate = self
  }

 override func viewDidAppear(animated: Bool) {
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
  }

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    if (touch.view == self.sliderprice){
        return false
    }
    else{
        return true
    }
  }

}

虽然这是一个老问题,我还是会回答的,也许对于来自谷歌搜索的人来说,这会很有帮助

经过几个小时的研究和思考,我终于想出了这个问题的多种解决方案

懒惰的人

此解决方案不推荐,但有效,因此我决定将其列出

在将
self
设置为
self.revealViewController().pangestrerecognizer()
的委托之前,将原始
self.revealViewController().pangestrerecognizer().delegate
存储到属性中,当您离开
视图时,屏幕将消失()
,设置
self.revealViewController().pangestregnizer().delegate
返回到存储在
viewDidLoad()中的文件。因此,最终它将返回其原始委托。像这样篡改代理从来都不是真正的建议,但我说,它是有效的

更好的

我认为这仍然不是最好的解决办法,但我们正在实现。查找一个类,一个在整个应用程序中使用的控制器,并在启动应用程序时被调用。这里将
SWRevealViewController
panGestureDelegate
设置到此类,并适当地覆盖
手势识别器shouldBegin
方法(见下文)

最好的(在我看来)

现在,这是最好、最清晰的解决方案。 目前(2018年5月),对SWRevealViewController的最后一次承诺是在2015年

分叉原始项目()或简单地复制两个必要的文件(
SWRevealViewController.m
SWRevealViewController.h
),并将它们放在单独的文件夹中以处理第三方库。然后,您可以从
pod文件中删除
SWRevealViewController
。不要忘了在您拥有的
SWRevealViewController
的地方修复导入

现在您可以自由修改文件。我的建议如下。 转到
SWRevealViewController.m
并执行以下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
      shouldReceiveTouch:(UITouch *)touch
{
    return ![touch.view isKindOfClass:UISlider.class];
}
如果触摸视图是一个
UISlider
(或从UISlider继承的自定义类),则手势不会开始,这意味着平移手势将不再与UISlider的平移手势冲突


我真的希望我能帮助任何人,因为这个问题让我的背部疼痛了很长一段时间。

虽然这是一个老问题,但我还是会回答它,也许对于来自谷歌搜索的人来说,这会有所帮助

经过几个小时的研究和思考,我终于想出了这个问题的多种解决方案

懒惰的人

此解决方案不推荐,但有效,因此我决定将其列出

在将
self
设置为
self.revealViewController().pangestrerecognizer()
的委托之前,将原始
self.revealViewController().pangestrerecognizer().delegate
存储到属性中,当您离开
视图时,屏幕将消失()
,设置
self.revealViewController().pangestregnizer().delegate
返回到存储在
viewDidLoad()中的文件。因此,最终它将返回其原始委托。像这样篡改代理从来都不是真正的建议,但我说,它是有效的

更好的

我认为这仍然不是最好的解决办法,但我们正在实现。查找一个类,一个在整个应用程序中使用的控制器,并在启动应用程序时被调用。这里将
SWRevealViewController
panGestureDelegate
设置到此类,并适当地覆盖
手势识别器shouldBegin
方法(见下文)

最好的(在我看来)

现在,这是最好、最清晰的解决方案。 目前(2018年5月),对SWRevealViewController的最后一次承诺是在2015年

分叉原始项目()或简单地复制两个必要的文件(
SWRevealViewController.m
SWRevealViewController.h
),并将它们放在单独的文件夹中以处理第三方库。然后,您可以从
pod文件中删除
SWRevealViewController
。不要忘了在您拥有的
SWRevealViewController
的地方修复导入

现在您可以自由修改文件。我的建议如下。 转到
SWRevealViewController.m
并执行以下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
      shouldReceiveTouch:(UITouch *)touch
{
    return ![touch.view isKindOfClass:UISlider.class];
}
如果触摸视图是一个
UISlider
(或从UISlider继承的自定义类),则手势不会开始,这意味着平移手势将不再与UISlider的平移手势冲突

我真的希望我能帮助任何人,因为这个问题在我的背上已经痛了很长一段时间了