Estoy intentando configurar una vista de desplazamiento con desplazamiento infinito (horizontal).UIScrollView Infinite Scrolling
Desplazar hacia adelante es fácil - Implementé scrollViewDidScroll, y cuando el contentOffset se acerca al final, agrandé el contenido de scrollview y agregué más datos al espacio (tendré que lidiar con el efecto paralizante que esto tendrá más adelante !)
Mi problema es el desplazamiento hacia atrás - el plan es ver cuándo estoy cerca del comienzo de la vista de desplazamiento, luego cuando hago que el contenido sea más grande, mueva el contenido existente, agregue los datos nuevos al comienzo y luego - importantemente ajuste el contentOffset para que los datos debajo del puerto de vista se mantengan iguales.
Esto funciona perfectamente si me desplazo lentamente (o habilito la paginación) pero si voy rápido (¡ni tan rápido!) ¡Se vuelve loco! Aquí está el código:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
float pageNumber = scrollView.contentOffset.x/320;
float pageCount = scrollView.contentSize.width/320;
if (pageNumber > pageCount-4) {
//Add 10 new pages to end
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
//add new data here at (320*pageCount, 0);
}
//*** the problem is here - I use updatingScrollingContent to make sure its only called once (for accurate testing!)
if (pageNumber < 4 && !updatingScrollingContent) {
updatingScrollingContent = YES;
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
mainScrollView.contentOffset = CGPointMake(mainScrollView.contentOffset.x + 3200, 0);
for (UIView *view in [mainContainerView subviews]) {
view.frame = CGRectMake(view.frame.origin.x+3200, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
}
//add new data here at (0, 0);
}
//** MY CHECK!
NSLog(@"%f", mainScrollView.contentOffset.x);
}
A medida que el desplazamiento ocurre el registro lee: 1286,500000 1285,500000 1284,500000 1283,500000 1282,500000 1281,500000 1280,500000
Entonces, cuando numPag < 4 (nos estamos cerca de la comenzando): 4479.500000 4479.500000
Gr ¡comer! - pero los números deben continuar a bajar en los 4,000s pero las entradas de registro siguiente lectura: 1278,000000 1277,000000 1276,500000 1275,500000 etc ....
Continiuing desde donde lo dejó!
Sólo para que conste, si es desplazado lentamente el registro de lecturas: 1294,500000 1290,000000 1284,500000 1280,500000 4476,000000 4476,000000 4473,000000 4470,000000 4467,500000 4464,000000 4460,500000 4457,500000 etc ....
¿¿¿¿Algunas ideas????
Gracias
Ben.
tener cuidado, parece 'setContentOffset: animada:' cancela el desplazamiento actual, pero no 'setContentOffset:' '... Anulación de setContentOffset:' en un descendiente de ' UIScrollView' y ajustes de compensación (al menos en iOS SDK 4.3). –
He notado que setContentOffset: animated: y setContentOffset: cancelan la animación de desplazamiento (iPad2 SDK 4.3) desafortunadamente. –