velocidad tiempo sobre rapidez promedio problemas igual fisica espacio desplazamiento como calcular uiscrollview

uiscrollview - tiempo - rapidez promedio y velocidad promedio



¿UIScrollView deshabilita el desplazamiento en una sola dirección? (9)

No he podido encontrar una respuesta para esto (tal vez alguien haya hackeado una solución juntos).

¿Es posible deshabilitar el desplazamiento en un UIScrollView en una dirección? No estoy hablando de deshabilitar el desplazamiento vertical u horizontal, sino de una sola dirección. Así, por ejemplo, en un UIScrollView, quiero poder arrastrar la vista de desplazamiento hacia abajo, pero no hacia arriba

Gracias


Afortunadamente, podemos usar scrollRectToVisible para evitar un comportamiento nervioso después de que se haya limitado el desplazamiento:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y > 60) { [scrollView setContentOffset:CGPointMake(0, 60)]; CGFloat pageWidth = scrollView.frame.size.width; CGFloat pageHeight = scrollView.frame.size.height; CGRect rect = CGRectMake(0, 0, pageWidth, pageHeight); [scrollView scrollRectToVisible:rect animated:YES]; } }


En lugar de usar un UIScrollViewDelegate para corregir el contentOffset ya incorrecto (que resultará en un comportamiento nervioso) es posible que desee considerar la subclase UIScrollView en lugar de anular setContentOffset:

- (void)setContentOffset:(CGPoint)contentOffset { if (contentOffset.y <= 60) { [super setContentOffset:contentOffset]; } }

Por supuesto, esto puede generalizarse agregando una propiedad para el valor mínimo o máximo permitido para el desplazamiento de contenido. Es posible que deba anular setContentOffset: animated: también.


Es posible eliminar el desplazamiento en dirección vertical configurando la altura scrollView.contentSize en el mismo valor que scrollView.frame.size.height. Se ocultará cualquier contenido desbordado. Por supuesto, se puede hacer lo mismo para restringir el desplazamiento vertical.


Esto funciona para mí:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ scrollView.bounces = YES; } -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ if (scrollView.contentOffset.y < 0) { [scrollView setContentOffset:CGPointMake(0, 0)]; scrollView.bounces = NO; } if (scrollView.contentOffset.y == 0){ scrollView.bounces = YES; } else scrollView.bounces = YES; }


Las soluciones anteriores lo pondrán a cero, cero si el usuario se desplaza verticalmente accidentalmente. Prueba esto...

- (void)scrollViewDidScroll:(UIScrollView *) scrollView { if (scrollView.contentOffset.y > 0) { [scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x, 0)]; } }


Resulta que una solución simple era realmente posible y fácil:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y > 60) { [scrollView setContentOffset:CGPointMake(0, 60)]; } }


Si configura contentSize del scroller igual al tamaño del contenido, en una de las direcciones, el scroll desaparecerá en esa dirección porque no habrá nada para desplazarse.


Una alternativa podría ser:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y < 10) { scrollView.bounces = NO; } else scrollView.bounces = YES; }

Pero recuerde que esto solo funcionará para las vistas de desplazamiento, que tienen un contenido más grande que sus marcos.


esto funciona para mi

static CGPoint lastOffset; - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { scrollView.scrollEnabled = YES; } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { scrollView.scrollEnabled = YES; lastOffset = scrollView.contentOffset; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGPoint nowOffset = scrollView.contentOffset; NSLog(@"delta %f", lastOffset.x - nowOffset.x); if ((lastOffset.x - nowOffset.x) < 0) { //uncomment to prevent scroll to left //scrollView.scrollEnabled = NO; } else if ((lastOffset.x - nowOffset.x) > 0) { //uncomment to prevent scroll to right //scrollView.scrollEnabled = NO; } else { scrollView.scrollEnabled = YES; } }