У меня есть представление коллекции с вертикальной прокруткой, и когда пользователь прокручивает его выше определенного порога, я хочу, чтобы ячейки анимировались вниз от экрана, чтобы показать фоновое представление (аналогично открытию представления заголовка).Приведенный ниже код работает, если пользователь заканчивает свою прокрутку с любой скоростью, но если он прокручивает и затем останавливается перед выпуском, представление сбора прекращает прокрутку, и ячейки остаются на месте (несмотря на то, что анимация правильно вызывается).У меня есть очень похожий код в этом приложении, и кажется, что он работает нормально, поэтому я не уверен, что здесь не так.
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
animateCollectionView(scrollView)
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
animateCollectionView(scrollView)
}
func animateCollectionView(_ scrollView: UIScrollView) {
guard !collectionViewIsAnimating else { return }
collectionViewIsAnimating = true
let minHeightToTrigger: CGFloat = -(scrollView.contentInset.top + triggerOffset)
if !collectionViewIsHidden && scrollView.contentOffset.y < minHeightToTrigger {
hideCollectionView(scrollView)
}
else {
showCollectionView(scrollView)
}
}
func hideCollectionView(_ scrollView: UIScrollView) {
scrollView.isUserInteractionEnabled = false
let height = scrollView.bounds.height
let initialOffset = scrollView.contentOffset
print("***** opening")
UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {
scrollView.contentInset = UIEdgeInsets(top: height, left: 0, bottom: 0, right: 0)
// scrollView.contentOffset.y = -height
scrollView.contentOffset = initialOffset
}) { (finished) in
if finished {
scrollView.isUserInteractionEnabled = true
self.collectionViewIsHidden = true
self.collectionViewIsAnimating = false
}
}
}