iphone - UIScrollView-con paginación habilitada, ¿puedo "cambiar" el ancho de página?
cocoa-touch (5)
Simplemente anule scrollViewWillEndDragging
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat pageWidth = 160;
targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}
¿Cuál es la forma más sencilla de tener una vista de desplazamiento (con pagingEnabled establecido en YES) tener un ancho de página establecido en algo diferente de los límites de la vista de desplazamiento?
Déjame dar un ejemplo. Supongamos que tengo una vista de desplazamiento con 10 elementos, cada uno de 150 píxeles de ancho, y mi vista de desplazamiento tiene 300 píxeles de ancho. Si comienzo con las vistas 1 y 2 visibles y me muevo horizontalmente hacia la derecha, quiero que la siguiente "página" muestre los ítems 2 y 3. Si me desplazo una página más a la derecha, vería los ítems 3 y 4.
¿Alguien ha hecho esto? Si no, ¿qué estrategia usarías?
Alexander Repty acaba de escribir un blog sobre este mismo tema: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html . Respuesta corta: no es tan simple como simplemente cambiar el ancho de la ''página'', pero no es demasiado difícil.
Micro,
usa el enfoque de mi blog al que Ben te vinculó. Haga que UIScrollView tenga la mitad del tamaño de la vista circundante (es decir, 150 px) y muévalo hacia la izquierda en lugar de dejarlo centrado.
Eso debería darle exactamente el comportamiento que quería.
Saludos, Alex
Seguramente se puede hacer con la ayuda de scrollview delegate methods & content-offset .
A continuación se muestra el código detallado para el mismo.
int start;
int end;
int k=0;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{
pageControlUsed = NO;
start = scrollView.contentOffset.x;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView1 willDecelerate:(BOOL)decelerate
{
end = scrollView.contentOffset.x;
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView1{
int diff = end-start;
if (diff>0)
{
k=k+150;
[scrollView setContentOffset:CGPointMake(k, 0) animated:YES];
}
else {
k=k-150;
[scrollView setContentOffset:CGPointMake(k, 0) animated:YES];
}
}
UIScrollView *album = [[UIScrollView alloc] init];
album.translatesAutoresizingMaskIntoConstraints = NO;
album.pagingEnabled = YES;
album.clipsToBounds = NO;
album.showsHorizontalScrollIndicator = NO;
album.contentInset = UIEdgeInsetsMake(0, -50, 0, -50);
[view addSubview:album];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_album(220)]" options:0 metrics:metrics views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_album(300)]" options:0 metrics:metrics views:views]];
esto funciona bien en iOS 7.1 ~ 8.2