gpt4 book ai didi

ios - tableView 上的 UIPanGestureRecognizer 不滚动表格项目

转载 作者:搜寻专家 更新时间:2023-11-01 06:28:31 31 4
gpt4 key购买 nike

UITableView (Swift 4.0) 上使用 UIPanGesture 来拖动 tableview 位置(即原点)。 UIPanGestureRecognizer 检测触摸事件并使用它们。在某些时候,我想将事件委托(delegate)给表,以便它滚动它的项目。我该怎么做?

我尝试了什么:

@objc func tableViewDragged(gestureRecognizer: UIPanGestureRecognizer) {

if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {

let translation = gestureRecognizer.translation(in: self.view)

// if origin moved to map origin it should not scroll above but cell should scroll normally. But returning does not help scrolling cells
if self.tableView.frame.origin == self.mapContainer.frame.origin && translation.y < 0 {

return
}

var frame = self.tableView.frame
let nHeight = (frame.origin.y + translation.y)

if (nHeight < self.view.frame.size.height) {

frame.origin.y = nHeight
self.tableView.frame = frame
gestureRecognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
}
}
}

添加到 tableView 的手势

let gesture = UIPanGestureRecognizer(target: self, action: #selector(self.tableViewDragged(gestureRecognizer:)))
self.tableView.addGestureRecognizer(gesture)
self.tableView.isUserInteractionEnabled = true
gesture.delegate = self

问题总结:

对于在 tableview 的任何点(即在任何单元格上)的相同平移手势,当 tableviews 原点固定在容器的左上角时,我需要滚动项目。否则我必须移动 tableview 直到它连接到左上角。此外,如果没有什么可以向下滚动,我需要再次移动下面的表格以进行平移手势。

*问题用例:*

  1. 初始条件 - tableview 原点在屏幕中间,即(0,高度/2)
  2. 向上平移手势 - 表格垂直向上移动,但没有项目滚动,直到原点停留在 (0,0)
  3. 向上平移手势 - 单元格项向上移动但不向上移动表格本身
  4. 向上平移手势 - 单元格项目向上移动到单元格末尾
  5. 向下平移手势 - 单元格项目向下移动直到索引 0,假设来到 0 索引
  6. 向下平移手势 - tableview 垂直向下移动,直到其原点到达屏幕中间 (0, Height/2)

最佳答案

最好的方法是使用 tableView 自己的 panGestureRecognizer(不添加新的 gestureRecognizer),例如:

tableView.panGestureRecognizer.addTarget(self, action: #selector(self.tableViewDragged(gestureRecognizer:))

Action

@objc func tableViewDragged(gestureRecognizer: UIPanGestureRecognizer) {
guard tableView.contentOffset.y < 0 else { return }
if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {

let translation = gestureRecognizer.translation(in: self.view)

// if origin moved to map origin it should not scroll above but cell should scroll normally. But returning does not help scrolling cells
if self.tableView.frame.origin == self.mapContainer.frame.origin && translation.y < 0 {

return
}

var frame = self.tableView.frame
let nHeight = (frame.origin.y + translation.y)

if (nHeight < self.view.frame.size.height) {

frame.origin.y = nHeight
self.tableView.frame = frame
gestureRecognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
}
}
}

关于ios - tableView 上的 UIPanGestureRecognizer 不滚动表格项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50618868/

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