仅当水平滚动至少为垂直滚动2

时间:2015-12-07 22:46:32

标签: ios swift uitableview

我有一个UITableView,其每个单元格都包含一个只能水平滚动的UIScrollView

我想触发UITableViewCell的水平滚动,只要例如x上的速度比y上的速度快至少2倍。如果不是这样,那么UITableView通常可以垂直滚动。

到目前为止,我已尝试继承我的UITableView并覆盖gestureRecognizerShouldBegin。但它没有奏效,因为我意识到我的水平gestureRecognizerShouldBegin(每个单元格的顶部之一)的UIScrollView首先被调用。

所以我决定覆盖水平gestureRecognizerShouldBegin上的UIScrollView

override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer is UIPanGestureRecognizer {
        let velocity = (gestureRecognizer as! UIPanGestureRecognizer).velocityInView(tableView)

        return fabs(velocity.x) > fabs(velocity.y) * 2
    }

    return super.gestureRecognizerShouldBegin(gestureRecognizer)
}

问题是我返回false然后UITableView没有滚动(gestureRecognizerShouldBegin甚至没有被调用)。

我该如何解决这个问题?为什么它会像这样?

2 个答案:

答案 0 :(得分:0)

您是否尝试将ScrollView上的canCancelContentTouches设置为false?

答案 1 :(得分:0)

我会禁用UIScrollView的手势,我会覆盖表格的手势识别器。 平移启动后,您将保留对“tapped”单元格的引用,并根据条件的值,您可以以编程方式/手动滚动表格或单元格内的UIScrollViewUIScrollViewUITableView有不同的方法来设置(滚动)内容偏移量。