2010-05-06 17 views
7

Tengo una aplicación en la que renderizo archivos HTML locales en un UIWebView. Sin embargo, los archivos a veces son grandes y llegar a donde usted quiere lleva mucho tiempo con la velocidad de desplazamiento predeterminada. ¿Hay alguna manera de aumentar la velocidad de desplazamiento vertical de un UIWebView?iPhone dev: ¿Aumenta la velocidad de desplazamiento en UIWebView?

Respuesta

23

En iOS 5 podemos acceder a la propiedad scrollView del UIWebView.

Si el idioma de iOS 5+, sólo tiene que llamar:

webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 
2

Buscar una subvista de UIWebView que responde a -setScrollDecelerationFactor: (es UIScroller - una clase privada que es la única subvista de UIScrollView). Usted encontrará que toma los mismos factores de deceleración definida para la clase UIScrollView pública:

- (void)webViewDidFinishLoad:(UIWebView *)aView { 
    id decelerator = [aView viewWithSelector:@selector(setScrollDecelerationFactor:)]; 
    [decelerator setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal]; 
} 

Tenga en cuenta que el método que estoy usando viewWithSelector: es un método que se define en una categoría de UIView. Presumiblemente, si UIWebView cambia en el futuro, mi búsqueda será nula y este método se convertirá en no operativo.

+0

yo no era capaz de hacer esto. Yo uso el siguiente código: 'para (UIView * subvista en self.currentScrollView.subviews) { si ([subvista respondsToSelector: @selector (setScrollDecelerationFactor :)]) { [setScrollDecelerationFactor subvista: UIScrollViewDecelerationRateNormal];' Pero esa condición nunca es verdadera. ¿Alguna ayuda? –

+0

My -viewWithSelector: el método atraviesa la jerarquía de vistas más allá de las subvistas. Es probable que UIScroller no sea un descendiente directo de UIWebView, por lo que su código no lo está encontrando. – MrO

+0

esto hará que tu aplicación sea rechazada. –

0

¿Has considerado agregar # etiquetas en tu html en límites significativos?

En realidad, podría utilizar la interfaz de usuario nativa para implementar marcadores o una tabla de contenido para facilitar la navegación, o simplemente incrustar enlaces a los destinos adecuados directamente en su html.

Si acelera el desplazamiento, su aplicación corre el riesgo de rechazarse por no ser estándar, ya que puede confundir a los usuarios que están acostumbrados a las vistas de la web que se desplazan con una "sensación" estándar.

7

Encuentra una vista secundaria de UIWebView que es un UIScrollView, a continuación, establezca decelerationRate a UIScrollViewDecelerationRateNormal. Esto hace que UIWebView sea tan rápido como un UIScrollView ordinario.

En iOS 4/5, podemos simplemente usar la última subvista de UIWebView.

UIScrollView *scroll = [webView.subviews lastObject]; 
if ([scroll isKindOfClass:[UIScrollView class]]) { 
    scroll.decelerationRate = UIScrollViewDecelerationRateNormal; 
} 

El valor predeterminado decelerationRate de UIScrollView de UIWebView es 0,989324, mientras UIScrollViewDecelerationRateFast es de 0.99 y UIScrollViewDecelerationRateNormal es 0,998.

Este método no utiliza ninguna API privada.

Cuestiones relacionadas