¿Cómo puedo comprobar si la vista de desplazamiento está rebotando? ¿Hay una notificación o algo cuando el rebote termina?¿Cómo puedo comprobar si la vista de desplazamiento está rebotando?
Respuesta
Sí ... echa un vistazo a la especificación UIScrollViewDelegate, poner en práctica los métodos, incluyendo los dos de abajo, y establecer delegado de su UIScrollView en consecuencia:
// User stops dragging the table view.
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
willDecelerate:(BOOL)decelerate;
// Control slows to a halt after the user drags it
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
Es probable que haya más interesados en scrollViewDidEndDecelerating. También funcionan en UITableView, que es donde originalmente los encontré (UITableView hereda de UIScrollView).
Así es como he detectado si la vista de desplazamiento está rebotando horizontal:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x < 0) {
NSLog(@"bouncing left");
}
if (scrollView.contentOffset.x > (scrollView.contentSize.width - scrollView.frame.size.width)) {
NSLog(@"bouncing right");
}
}
Una pequeña modificación al método de Justin, lo que permite contentInset:
if(scrollView.contentOffset.x < -scrollView.contentInset.left)
{
NSLog(@"bounce left");
}
if(scrollView.contentOffset.x > scrollView.contentSize.width - scrollView.frame.size.width + scrollView.contentInset.right)
{
NSLog(@"bounce right");
}
Para aquellos de ustedes que sería capaz para "rebotar" hacia abajo en una vista de desplazamiento para actualizar el contenido de la vista. (Y el evento sólo se disparó una vez.)
- (void)scrollViewDidEndDragging:(UIScrollView *)aScrollView
willDecelerate:(BOOL)decelerate{
CGPoint offset = aScrollView.contentOffset;
CGRect bounds = aScrollView.bounds;
CGSize size = aScrollView.contentSize;
UIEdgeInsets inset = aScrollView.contentInset;
float y = offset.y + bounds.size.height - inset.bottom;
float h = size.height;
//Distance in points before update-event occur
float reload_distance = 50;
//
if(y > h + reload_distance) {
NSLog(@"load more rows");
}
}
pregunta Viejo pero simplemente se topó con un problema similar y quería añadir que es una buena idea para comprobar también que el contenido vistas de desplazamiento es mayor que el desplazamiento marco de vista:
+ (BOOL) isScrollViewBouncing:(UIScrollView *)scrollView
{
return scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.size.height
&& scrollView.contentSize.height > scrollView.frame.size.height;
}
Esto ahora se asegura la vista de desplazamiento es suficientemente grande como para estar en un estado de desplazamiento de rebotes, por lo que si el punto de vista de desplazamiento es pequeño, no siempre se evalúa como verdadera.
Saludos
Uso de la respuesta de Glavid, que añaden que rebota hacia abajo también, y ha añadido como una categoría
#import "UIScrollView+Additions.h"
@implementation UIScrollView (Additions)
- (BOOL)isBouncing
{
BOOL isBouncingBottom = self.contentOffset.y >= self.contentSize.height - self.frame.size.height
&& self.contentSize.height >= self.frame.size.height;
BOOL isBouncingTop = self.contentOffset.y <= 0;
BOOL isBouncing = isBouncingBottom || isBouncingTop;
return isBouncing;
}
@end
he implementado extensión para UIScrollView manejar esto para el desplazamiento vertical y horizontal. Esto funciona incluso con contentInsets distintos de cero y en el caso cuando el contenido no es lo suficientemente grande como para cubrir ScrollView inserciones:
Objective-C
@interface UIScrollView (Bouncing)
@property (nonatomic, readonly) BOOL isBouncing;
@property (nonatomic, readonly) BOOL isBouncingTop;
@property (nonatomic, readonly) BOOL isBouncingLeft;
@property (nonatomic, readonly) BOOL isBouncingBottom;
@property (nonatomic, readonly) BOOL isBouncingRight;
@end
@implementation UIScrollView (Bouncing)
- (BOOL)isBouncing
{
return self.isBouncingTop || self.isBouncingLeft || self.isBouncingBottom || self.isBouncingRight;
}
- (BOOL)isBouncingTop
{
return self.contentOffset.y < - self.contentInset.top;
}
- (BOOL)isBouncingLeft
{
return self.contentOffset.x < - self.contentInset.left;
}
- (BOOL)isBouncingBottom
{
BOOL contentFillsScrollEdges = self.contentSize.height + self.contentInset.top + self.contentInset.bottom >= CGRectGetHeight(self.bounds);
return contentFillsScrollEdges && self.contentOffset.y > self.contentSize.height - CGRectGetHeight(self.bounds) + self.contentInset.bottom;
}
- (BOOL)isBouncingRight
{
BOOL contentFillsScrollEdges = self.contentSize.width + self.contentInset.left + self.contentInset.right >= CGRectGetWidth(self.bounds);
return contentFillsScrollEdges && self.contentOffset.x > self.contentSize.width - CGRectGetWidth(self.bounds) + self.contentInset.right;
}
@end
Swift 3.0+
extension UIScrollView {
var isBouncing: Bool {
return isBouncingTop || isBouncingLeft || isBouncingBottom || isBouncingRight
}
var isBouncingTop: Bool {
return contentOffset.y < -contentInset.top
}
var isBouncingLeft: Bool {
return contentOffset.x < -contentInset.left
}
var isBouncingBottom: Bool {
let contentFillsScrollEdges = contentSize.height + contentInset.top + contentInset.bottom >= bounds.height
return contentFillsScrollEdges && contentOffset.y > contentSize.height - bounds.height + contentInset.bottom
}
var isBouncingRight: Bool {
let contentFillsScrollEdges = contentSize.width + contentInset.left + contentInset.right >= bounds.width
return contentFillsScrollEdges && contentOffset.x > contentSize.width - bounds.width + contentInset.right
}
}
- 1. Cómo comprobar si la barra de desplazamiento está en la parte inferior
- 2. ¿Cómo puedo verificar si la vista de la imagen está vacía o no
- 3. VBA Comprobar si la variable está vacía
- 4. ¿Cómo puedo comprobar si una secuencia está vacía en F #?
- 5. ¿Cómo puedo comprobar si una variable en Javascript está inicializada?
- 6. Comprobar si la actividad está activa
- 7. Cómo comprobar si un elemento está en la vista del usuario con jquery
- 8. ¿Cómo comprobar si javascript está deshabilitado?
- 9. ¿Cómo comprobar si PHP mail() está habilitado?
- 10. ¿Cómo comprobar si UITextFields está vacío?
- 11. ¿Cómo comprobar si está correctamente instalado mongodb
- 12. ¿Cómo comprobar si Suhosin está instalado?
- 13. ¿Cómo comprobar si un hilo está durmiendo?
- 14. cómo comprobar si boost :: deadline_timer está activo
- 15. ¿Cómo comprobar si bluetooth está habilitado programáticamente?
- 16. ¿Cómo comprobar si una clase está inicializada?
- 17. ¿Cómo comprobar si $ _GET está vacío?
- 18. C# DataGridView Comprobar si está vacío
- 19. ¿Cómo comprobar si la matriz está en la lista?
- 20. ¿Cómo comprobar si la conexión de TcpClient está cerrada?
- 21. Ajustar la vista de desplazamiento cuando el teclado está activo
- 22. Con iOS, cómo comprobar si la URL está vacía
- 23. Cómo comprobar si el elemento se está arrastrando actualmente
- 24. Cómo comprobar si la validación del formulario html5 está completa
- 25. ¿Cómo comprobar rápidamente si la carpeta está vacía (.NET)?
- 26. Android: ¿cómo comprobar si se está tocando la pantalla?
- 27. powershell: ¿cómo comprobar si se está ejecutando la transcripción?
- 28. Perl ¿cómo comprobar si la matriz todavía está vacía?
- 29. Cómo comprobar si la opción wifi está habilitada o no
- 30. ¿Cómo comprobar si la matriz es nula o está vacía?
Muchas gracias. Lo sé de esta manera, solo pensé que hay otro método. ¡Gracias! :) –