Red de conocimiento informático - Problemas con los teléfonos móviles - La paginación personalizada UICollectionView habilita el área de paso de página

La paginación personalizada UICollectionView habilita el área de paso de página

Es difícil encontrar este título:

Mire el efecto:

Compare el efecto cuando se establece collectionView.pagingEnabled = YES:

El código fuente en GitHub utiliza macros para definir el ancho y el espaciado de los elementos.

En primer lugar, el parámetro propuestoContentOffset significa que el sistema calculará la posición de destino a la que deslizarse en función del gesto de deslizamiento del usuario.

Podemos anular este método en una subclase de UICollectionViewFlowLayout para personalizar la posición de deslizamiento según elContentOffset propuesto y la velocidad calculada por el sistema.

Establezca los parámetros del proyecto como macros para facilitar su modificación

En este método, debe calcular:

Anule este método para especificar dónde se detiene el deslizamiento, mi La idea de cálculo es determinar si se debe pasar la página hacia adelante o hacia atrás en función del gesto de deslizamiento del usuario. Para pasar la página hacia atrás, el índice de la página de destino = _currentIndex 1. Al pasar páginas, el ancho real de la página es el ancho que puede mostrar la mayor cantidad de elementos por página, es decir, _pageCapacity * (kItemWidth kPaddingMid), luego el desplazamiento objetivo del eje x es point.x = número de página de destino * ancho real de cada uno página

Aquí necesita saber el número de página actual antes de deslizar _currentIndex. Calculé el índice actual usando el método delegado de UIScrollViewDelegate para obtener el desplazamiento del eje x cuando el usuario está a punto de deslizar el dedo.

Como se explicó al principio del artículo, configurar scrollView.pagingEnabled = YES no logra nuestro objetivo, por lo que en el escenario descrito en este artículo, debemos establecer scrollView.pagingEnabled = NO. pagingEnabled = NO, de lo contrario, la posición de deslizamiento personalizada en la función anterior no funcionará

Establezca scrollView.decelerationRate = UIScrollViewDecelerationRateFast;, el efecto de deslizamiento es básicamente cercano al pagingEnabled del sistema

Establezca scrollView .pagingEnabled = UIScrollViewDecelerationRateFast;. Ejecute una prueba simple, que básicamente cumple con los requisitos

Del registro de impresión, encontramos que cuando pasamos de la primera página a la segunda página y luego continuamos deslizándonos (sin esperar a que el deslizamiento se detenga por completo) ), el eje X se desvía El desplazamiento es unos pocos píxeles más pequeño que el desplazamiento objetivo, es decir, la diapositiva no está completamente terminada.

Dado que el índice de la página actual se obtiene redondeando el desplazamiento del eje x al entero más cercano, esta diferencia de unos pocos píxeles hará que el índice sea 1 píxel más pequeño de lo esperado

Al calcular la página actual Al numerar _currentIndex, se compensará el desplazamiento del eje x. Dado que kItemWidth siempre es menor que _pageCapacity * (kItemWidth kPaddingMid), esta compensación no hará que el índice de la página aumente en 1 y es seguro

al calcular. la página actual number_currentIndex, el desplazamiento del eje X se compensa con el ancho del elemento.