在表视图上滚动操作



我使用这个函数来检测是否在tableView上应用了向上/向下滚动操作。由于某些原因,它只检测向上滚动而不检测向下滚动。有什么想法吗?

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
tableView.reloadData()
DispatchQueue.main.async {
if targetContentOffset.pointee.y < scrollView.contentOffset.y {
print("go up")
print(self.currentRow)
self.tableView.scrollToRow(at: NSIndexPath(row: self.currentRow-1, section: 0) as IndexPath, at: UITableView.ScrollPosition.top, animated: true)
} else {
print("go down")
print(self.currentRow)
self.tableView.scrollToRow(at: NSIndexPath(row: self.currentRow+1, section: 0) as IndexPath, at: UITableView.ScrollPosition.top, animated: true)
self.currentRow += 1
}
}
}

scrollViewWillEndDragging当用户完成滚动内容时,告诉代理。

尝试使用此功能:

var current:CGFloat = 0
func scrollViewWillBeginDragging(scrollView: UIScrollView) {
self.current = scrollView.contentOffset.y
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let contentOffset = scrollView.contentOffset.y
if contentOffset > current {
print("go up")
}else if current > contentOffset{
print("go down")
}else{//
}
}

只需记录scrollViewDidScroll委托之外的最后一个偏移量,并检查当前偏移量是否大于或小于该值。

var lastOffset: CGFloat = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
if offset < lastOffset { // check offset difference
NSLog("user is scrolling up")
} else {
NSLog("user is scrolling down")
}
lastOffset = offset // record last offset
}

我使用NSLog打印到控制台以添加时间戳,这样您就可以看到它在长卷上启动。

最新更新