Swift - UICollection возвращается слишком быстро, если элемент немного прокручивается - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь заставить UICollectionView привязываться к центру любой ячейки элемента рядом с ним, но проблема в том, что, когда я немного немного ее передвигаю, он слишком быстро возвращается к центру ячейки, которая не смотритsmooth, возможно ли игнорировать или отключать прокрутку, если пользователь не переходит к следующему элементу и не заставляет scrollview привязывать его к тому же элементу?

вот мой код для привязки

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

    let layout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    let cellWidthIncludingSpacing = layout.itemSize.width + layout.minimumLineSpacing
    var offset = targetContentOffset.pointee

    let index = (offset.x + scrollView.contentInset.left ) / cellWidthIncludingSpacing
    let roundedIndex = round(index)

    self.lastContentOffset = scrollView.contentOffset.x
    offset = CGPoint(x: roundedIndex * cellWidthIncludingSpacing - scrollView.contentInset.left, y: -scrollView.contentInset.top)

    targetContentOffset.pointee = offset


}

Редактировать: Это то, как он возвращается с физического устройства.это здесь медленнее, потому что это GIF

enter image description here

1 Ответ

0 голосов
/ 13 марта 2019

Это возврат, потому что вы напрямую устанавливаете contentOffset. Вместо этого вы должны вызвать UIScrollViewMethod setContentOffset (_: animated:) с анимированным значением true. Если вам по-прежнему не нравятся результаты, рассмотрите возможность реализации метода UICollectionLayout targetContentOffsetForProposedContentOffset: withScrollingVelocity: , а затем макет будет автоматически привязан к точке, которую вы возвращаете.

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