2010-10-04 9 views

Respuesta

8

por lo general uso el método siguiente (añadido a la categoría UIScrollView personalizado):

- (CGRect) visibleRect{ 
    CGRect visibleRect; 

    visibleRect.origin = self.contentOffset; 
    visibleRect.size = self.bounds.size; 

    visibleRect.origin.x /= self.zoomScale; 
    visibleRect.origin.y /= self.zoomScale; 
    visibleRect.size.width /= self.zoomScale; 
    visibleRect.size.height /= self.zoomScale; 
    return visibleRect; 
} 
+0

gracias, funcionó como se esperaba :) – Manny

+0

Agradecería que dejaras algún comentario sobre mi respuesta. – DanSkeel

5

El problema con solución @Vladimir es que muestra visibleRect mal si viewForZoom es menor que los límites ScrollView. Así que se me ocurrió esta solución.

- (CGRect) zoomedFrame{ 
    CGRect zoomedFrame; 

    zoomedFrame.origin = self.contentOffset; 
    zoomedFrame.origin.x -= zoomingView.frame.origin.x; 
    zoomedFrame.origin.y -= zoomingView.frame.origin.y; 
    zoomedFrame.size = self.contentSize; 
    return zoomedFrame; 
} 

zoomingView es una vista que devuelve viewForZoomingInScrollView: método.
bounds son límites de scrollView.


Así que hay dos casos:

  1. Cuando el zoomingView es menor que bounds, contentOffset no reflejan la esquina superior izquierda de vista del contenido, pero un extraño cambio de ver el contenido relativo al centro de bounds. Y zoomingView.frame.origin tiene valores normales como si zoomingView estuvieran en el centro de bounds. (esto ocurre si se intenta reducir el tamaño del zoomingView más de minimulScale)

  2. Cuando el zoomingView es bigget que bounds, zoomingView.frame.origin tiene valores extraños como este:

    {-6.15367e-06, 3.98168 e-06}

    Y contentOffset muestra lo que should.


Así que todo lo que se compensan entre sí como he mostrado en mi código.

Cuestiones relacionadas