Swift: анимация содержимого UIScrollView не работает - PullRequest
0 голосов
/ 19 мая 2019

У меня есть представление коллекции с вертикальной прокруткой, и когда пользователь прокручивает его выше определенного порога, я хочу, чтобы ячейки анимировались вниз от экрана, чтобы показать фоновое представление (аналогично открытию представления заголовка).Приведенный ниже код работает, если пользователь заканчивает свою прокрутку с любой скоростью, но если он прокручивает и затем останавливается перед выпуском, представление сбора прекращает прокрутку, и ячейки остаются на месте (несмотря на то, что анимация правильно вызывается).У меня есть очень похожий код в этом приложении, и кажется, что он работает нормально, поэтому я не уверен, что здесь не так.

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