gpt4 book ai didi

swift - SWRevealViewController 与 UISlider 冲突

转载 作者:行者123 更新时间:2023-11-28 08:38:15 24 4
gpt4 key购买 nike

我目前在尝试在我的一个 View 中委托(delegate) SWRevealViewController panGestureRecognizer 方法时遇到问题。

当我滑动我的 UISlider 时,panGesture 会干扰并打开侧边菜单而不是移动我的 slider 。

我尝试委托(delegate) panGesture 并且它运行良好,但如果我退出我的 View 并转到另一个 View ,pangesture 不再起作用,并且我无法从我的第二个 View 显示我的侧边菜单。

我的代码:

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

}

最佳答案

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

经过数小时的研究和思考,我终于能够针对这个问题提出多种解决方案。

懒人

这个解决方案不被推荐,但是有效,所以我决定列出它。

在将 self 设置为 self.revealViewController().panGestureRecognizer() 的委托(delegate)之前,存储原始的 self.revealViewController().panGestureRecognizer()。 delegate 给一个属性,当你在 viewWillDisappear() 离开屏幕时,将 self.revealViewController().panGestureRecognizer().delegate 设置回那个您存储在 viewDidLoad() 中。所以最后它取回了它原来的委托(delegate)。从来没有真正推荐像这样篡改代表,但我说,它有效。

更好的一个

我认为这仍然不是最佳解决方案,但我们正在实现这一目标。找到一个类,一个在整个应用程序中使用并在启动应用程序时被调用的 Controller 。这里将 SWRevealViewControllerpanGestureDelegate 设置为此类,并适本地覆盖 gestureRecognizerShouldBegin 方法(见下文)。

最好的一个 - (在我看来)

现在这是最好和最明确的解决方案。目前(2018 年 5 月)最后一次提交 SWRevealViewController 是在 2015 年。

fork 原始项目 ( https://github.com/John-Lluch/SWRevealViewController ) 或简单地复制两个必要的文件 (SWRevealViewController.mSWRevealViewController.h) 并将它们放在一个单独的文件夹中处理第 3 方库。然后,您可以从 Podfile 中删除 SWRevealViewController。不要忘记修复 SWRevealViewController 的导入。

现在您可以随意修改文件了。我的建议如下。转到 SWRevealViewController.m 并实现以下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
{
return ![touch.view isKindOfClass:UISlider.class];
}

如果触摸的 View 是 UISlider(或继承自 UISlider 的自定义类),则手势不会开始,这意味着平移手势将不再与 UISlider 的平移手势冲突。

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

关于swift - SWRevealViewController 与 UISlider 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com