Прокрутить действие на просмотр таблицы - PullRequest
0 голосов
/ 15 декабря 2018

Я использую эту функцию, чтобы определить, применяется ли действие прокрутки вверх / вниз к 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
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Просто сохраните запись последнего смещения вне делегата 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 для печати вконсоль для добавления метки времени, чтобы вы могли видеть ее стрельбу на длинных свитках.

0 голосов
/ 15 декабря 2018

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{//
    }
 }
...