2012-06-05 13 views
7

Cuál es la mejor manera de establecer límites en el desplazamiento hacia la izquierda/derecha de un UIScrollView. Hubiera pensado que esto sería fácil, pero todos mis intentos no han tenido éxito.iOS. ¿Cómo restrinjo el desplazamiento UIScrollview de forma limitada?

Por lo tanto, para ser claros, necesito una solución que me permita limitar programáticamente la extensión de desplazamiento cada vez que lo necesite durante el uso de mi aplicación. Esto generalmente será en respuesta a cambios en los datos que se muestran.

Gracias,
Doug

Respuesta

-4

Fui con mi método de colocar restricciones de balance en mi método layoutSubviews sobrecargado.

Pseudo-código:

Calculate criteria for constraining pan 
if (pan-constraint-is-met) { 

    Calculate pan-limit 
    [self setContentOffset:limitedContentOffset]; 

} 
7

Todo lo que tendría que hacer es cambiar el tamaño del contenido de la vista de desplazamiento con el siguiente código.

[scrollView setContentSize:CGSizeMake(width, height)];

+0

En mi caso no puede alterar el contenido de todos modos. Estoy haciendo una aplicación de visualización y el tamaño del contenido es fundamental para la visualización. Lo que estoy buscando es algo análogo a minimumZoomScale y maximumZoomScale. Cambiar estos valores no tiene efecto en el contenido. – dugla

11

se puede controlar el tamaño de contenido utilizando contentSize propiedad de vista de desplazamiento. Si eso no es suficiente para usted (por ejemplo, necesita limitar el área de desplazamiento a alguna región arbitraria en medio de su contenido) puede forzar que contentOffset esté en el límite requerido en el método de delegado de su vista de desplazamiento.

Básicamente código puede verse como:

- (void) scrollViewDidScroll:(UIScrollView*)scroll{ 
    CGPoint offset = scroll.contentOffset; 

    // Check if current offset is within limit and adjust if it is not 
    if (offset.x < minOffsetX) offset.x = minOffsetX; 
    if (offset.y < minOffsetY) offset.y = minOffsetY; 
    if (offset.x > maxOffsetX) offset.x = maxOffsetX; 
    if (offset.y > maxOffsetY) offset.y = maxOffsetY; 

    // Set offset to adjusted value 
    scroll.contentOffset = offset; 
} 
+0

Vladimir, en realidad encontré un enfoque que funcionará de manera similar a su solución. Sobreescribo layoutSubViews en mi subclase scrollView y hago el pinzamiento allí, de forma similar a lo que está haciendo en scrollViewDelegate. De hecho, no estoy seguro de qué enfoque es preferible. Si recuerdo que el método de delegado se activa después de layoutSubviews. ¿Alguna idea? – dugla

+0

Esto causará un problema cuando la búsqueda está habilitada, la búsqueda no funcionará correctamente. – moligaloo

Cuestiones relacionadas