【问题标题】:Recognize two fingers swipe down gesture in UITableView识别 UITableView 中的两根手指向下滑动手势
【发布时间】:2016-04-22 09:02:58
【问题描述】:

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

这是我的代码:

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

setupGestureRecognizer()viewDidLoad() 中被调用

当我用两根手指向上或向下滑动时,我会收到警报,但当我使用平移手势时,桌子移动前会出现明显的延迟。这可能是平移手势需要等待以确保滑动手势失败的时间:

实际上将requireGestureRecognizerToFail 设置为swipeDown.requireGestureRecognizerToFail(self.tableView.panGestureRecognizer) 对我来说更有意义,但是当我尝试它时,滑动手势根本不起作用。我认为panGestureRecognizer 失败存在问题。如果我明确声明它应该接受maximumNumberOfTouches = 1,为什么我用两根手指不会失败?

你知道如何让这些手势相互交互吗?

【问题讨论】:

  • 你找到解决办法了吗?

标签: ios uitableview uigesturerecognizer uipangesturerecognizer uiswipegesturerecognizer


【解决方案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
}

总是返回真。这将注意是否正在处理滑动或平移。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2023-04-09
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多