iphone cocoa-touch uiscrollview

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?



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