我正在使用此功能来检测是否在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
}
}
}
答案 0 :(得分: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{//
}
}
答案 1 :(得分:1)
只需保留char
委托之外的最后一个偏移量记录,并检查当前偏移量是否大于或小于该值。
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
}
打印到控制台以添加时间戳记,以便长时间滚动时可以看到它。