Обычно UICollectionView начинает отскок при прокрутке мимо его contentSize, т.е. когда contentOffset < 0
или contentOffset > contentSize.width
для горизонтальной ориентации.
Можно ли изменить это поведение, чтобы эффект отскока начинался при прокрутке, скажем, 10-го элемента (когда contentOffset < itemSize.Width * 10
или contentOffset > contentSize.width - (itemSize.Width * 10)
)?
ОБНОВЛЕНИЕ 1:
@OverD - спасибо, что указал мне правильное направление.
Я закончил с работой в scrollViewWillEndDragging
и настроил targetContentOffset
при необходимости.
Проблема, с которой я все еще сталкиваюсь, заключается в том, что анимация отскока не является плавной , как исходный отскок при достижении конца contenSize.
Есть идеи, чего не хватает? Фрагмент кода ниже:
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let numberOfBouncingCells = 10
let extraSectionWidth = (collectionViewFlowLayout.itemSize.width + collectionViewFlowLayout.minimumLineSpacing) * numberOfBouncingCells
let startXOffset = extraSectionWidth
let endXOffset = collectionView.contentSize.width - 2 * extraSectionWidth
let yOffset = collectionView.contentOffset.y
if targetContentOffset.pointee.x < startXOffset {
targetContentOffset.pointee = CGPoint(x: startXOffset, y: yOffset)
} else if targetContentOffset.pointee.x > endXOffset {
targetContentOffset.pointee = CGPoint(x: endXOffset, y: yOffset)
}
}
ОБНОВЛЕНИЕ 2 (для ответа):
См. Ответ ниже, я отказался от подхода scrollViewWillEndDragging
в пользу простого изменения collectionView.contentInset
[.left, .right]