UICollectionView - Горизонтальное разбиение на страницы с 3 видимыми страницами и 1 посередине, используя UICollectionView
Я пытаюсь реализовать ту же функцию, что и в мобильном Safari при прокрутке различных страниц с помощью UICollectionView. Одна страница находится посередине, а части других также видны.
Я изо всех сил пытаюсь добиться такого поведения, используя UICollectionView. Есть 1 способ, которым я нашел, как разместить 3 страницы на одном экране - сделать страницы меньше и установить соответствующие вставки. Но как только я уменьшил размер страниц и включил пейджинг, страницы не прокручиваются по центру, как это должно быть. Я также могу оставить подкачку отключенной и использовать этот метод в подклассе UICollectionViewFlowLayout:
- (CGRect)rectForTargetPageForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
В этом методе я могу указать, где именно остановится UICollectionView. Однако процесс прокрутки не так хорош, как при использовании UIScrollview с включенной подкачкой страниц. Когда я пролистал с большей скоростью, несколько страниц были прокручены, и это остановилось на предложенной странице. Я хочу добиться того же поведения, что и в обычном режиме прокрутки с включенной подкачкой страниц - при любой скорости, которую я использую, я получу только 1 страницу больше.
У кого-нибудь есть идеи, как решить эту проблему с помощью UICollectionView?
1 ответ
Итак, вы хотите сделать размер страницы меньше размера прокрутки, верно? Размер страницы всегда совпадает с размером представления прокрутки, поэтому вам необходимо уменьшить его размер.
Тогда есть другая проблема. Как получать прикосновения за пределы вида прокрутки?
Override -[UIView pointInside:withEvent:]
вида прокрутки, чтобы проверить наличие больших границ, чем они есть на самом деле. Тогда прикосновения должны работать.
На самом деле я не пробовал это сам, я делал это, размещая дополнительный вид сверху с желаемыми границами и переопределением -[UIView hitTest:withEvent:]
, Внутри я изменил точку и вызвал тест на просмотр прокрутки. Таким образом, касания обрабатывались в режиме прокрутки, но их положение было неправильным. Вы можете попробовать объединить эти два подхода, чтобы получить правильную позицию.