Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 识别UITableView中的两个手指向下滑动手势_Ios_Uitableview_Uigesturerecognizer_Uipangesturerecognizer_Uiswipegesturerecognizer - Fatal编程技术网

Ios 识别UITableView中的两个手指向下滑动手势

Ios 识别UITableView中的两个手指向下滑动手势,ios,uitableview,uigesturerecognizer,uipangesturerecognizer,uiswipegesturerecognizer,Ios,Uitableview,Uigesturerecognizer,Uipangesturerecognizer,Uiswipegesturerecognizer,我想在UITableView中添加两个手指上下滑动的手势。 这个想法是使用一个手指平移手势滚动单元格,并使用两个手指向上/向下滑动手势执行其他操作。 我想获得与Tweetbot的夜间模式切换类似的体验: 这是我的代码: func setupGestureRecognizer() { swipeUp = UISwipeGestureRecognizer(target: self, action: "handleSwipe") swipeDown = UISwipeGestureR

我想在UITableView中添加两个手指上下滑动的手势。 这个想法是使用一个手指平移手势滚动单元格,并使用两个手指向上/向下滑动手势执行其他操作。 我想获得与Tweetbot的夜间模式切换类似的体验:

这是我的代码:

func setupGestureRecognizer() {

    swipeUp = UISwipeGestureRecognizer(target: self, action: "handleSwipe")
    swipeDown = UISwipeGestureRecognizer(target: self, action: "handleSwipe")

    swipeUp.direction = UISwipeGestureRecognizerDirection.Up
    swipeDown.direction = UISwipeGestureRecognizerDirection.Down

    swipeUp.numberOfTouchesRequired = 2
    swipeDown.numberOfTouchesRequired = 2

    self.tableView.panGestureRecognizer.maximumNumberOfTouches = 1

    self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeUp)
    self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeDown)

    self.tableView.addGestureRecognizer(swipeUp)
    self.tableView.addGestureRecognizer(swipeDown)

}

func handleSwipe() {
    print("Swiped!")
    let alert = UIAlertController(title: "Gesture recognizer", message: "Swipe detected", preferredStyle: UIAlertControllerStyle.Alert)
    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)
    alert.addAction(action)
    self.presentViewController(alert, animated: true, completion: nil)
}
viewDidLoad()

当我用两个手指向上或向下滑动时,我会得到警报,但当我使用平移手势时,在桌子移动之前会有明显的滞后。这可能是平移手势需要等待以确保滑动手势失败的时间:

实际上,将
requiregestureerecognizertofail
设置为:
swipeDown.requiregestureerecognizertofail(self.tableView.pangestureerecognizer)
对我来说更有意义,但当我尝试时,滑动手势根本不起作用。我认为
pangestureerecognizer
失败有问题。如果我明确表示它应该接受
MaximumNumberOfTouchs=1
,那么当我使用两个手指时,为什么没有失败呢

你知道如何使这些手势相互作用吗?

删除这些线条

self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeUp)
self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(swipeDown)
为swipeUp和swipeDown设置手势代理

swipeDown.delegate = self
swipeUp.delegate = self
并动态处理失败的手势代理

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

始终返回true。这将考虑是否正在处理刷卡或平移。

您找到解决方案了吗?