Как обнаружить, что UIScrollView закончил прокрутку, когда анимация ложна? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть collectionView с именем timeline, который прокручивается программно со второй до последней строки здесь:

internal func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
        if !onceOnly {
            let indexToScrollTo = IndexPath(row: self.posts.count - 1, section: 0)
            collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
            let firstPost = posts.first?.timeStamp
            let firstOfFirstMonth = firstPost?.startOfMonth()
            let diff = posts.last?.timeStamp.months(from: firstOfFirstMonth!)
            //self.currentPostMonth = diff
            let monthCellIndexPath = IndexPath(row: diff!, section: 0)
            timeline.scrollToItem(at: monthCellIndexPath, at: .centeredHorizontally, animated: false)
            onceOnly = true
        }
    }

позже .. Я пытаюсь обнаружить, что прокрутка завершена с

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    if scrollView == timeline {
        print("Did finish")
    }
}

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
    if scrollView == timeline {
        print("Did finish")
    }
}

Ни один оператор печати не срабатывает после завершения прокрутки. Я думаю, что частично, потому что анимация = ложь. Когда я устанавливаю это в true, он печатает «Закончил правильно» - я думаю, что scrollViewDidEndScrollingAnimation печатает, даже если scrollViewDidEndDecelerating по-прежнему ничего не делает, потому что он прокручивается программно.

Как я могу определить, что этот свиток закончен?

1 Ответ

0 голосов
/ 05 сентября 2018

Я думаю, потому что вы сравниваете collectionView с scrollView

if scrollView == timeline

, что false, кстати, вы можете использовать

func scrollViewDidScroll(_ scrollView: UIScrollView)

Если анимация отсутствует, то в следующей строке после

timeline.scrollToItem(at: monthCellIndexPath, at: .centeredHorizontally, animated: false)

запускайте то, что вы хотите, так как это будет происходить последовательно, когда прокрутка успешно завершилась, нет необходимости устанавливать его в методах делегата scrollView, независимо от того, вызывается он или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...