2010-04-13 24 views
5

Estoy luchando con mi UIScrollview para hacer que amplíe el UIImageView subyacente. En mi controlador de vista me puseUIScrollView setZoomScale no funciona?

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
return myImageView; 
} 

En el método viewDidLoad intento configurar el zoomScale a 2 de la siguiente manera (tenga en cuenta la UIImageView e Imagen se encuentra en el Interface Builder):

- (void)viewDidLoad { 
[super viewDidLoad]; 

myScrollView.contentSize = CGSizeMake(myImageView.frame.size.width, myImageView.frame.size.height); 
myScrollView.contentOffset = CGPointMake(941.0, 990.0); 
myScrollView.minimumZoomScale = 0.1; 
myScrollView.maximumZoomScale = 10.0; 
myScrollView.zoomScale = 0.7; 
myScrollView.clipsToBounds = YES; 
myScrollView.delegate = self; 

NSLog(@"zoomScale: %.1f, minZoolScale: %.3f", myScrollView.zoomScale, myScrollView.minimumZoomScale); 
} 

que intentaron una algunas variaciones de esto, pero NSLog siempre muestra un zoomScale de 1.0.

¿Alguna idea de dónde arruinar esto?

Respuesta

19

Finalmente conseguí esto para trabajar. lo que causó el problema fue que la llamada del delegado estaba al final. Ahora lo moví hacia arriba y ... aquí vamos.

nuevo código es el siguiente:

- (void)viewDidLoad { 
[super viewDidLoad]; 

myScrollView.delegate = self; 
myScrollView.contentSize = CGSizeMake(myImageView.frame.size.width, myImageView.frame.size.height); 
myScrollView.contentOffset = CGPointMake(941.0, 990.0); 
myScrollView.minimumZoomScale = 0.1; 
myScrollView.maximumZoomScale = 10.0; 
myScrollView.zoomScale = 0.7; 
myScrollView.clipsToBounds = YES; 
} 
+6

Parece que esto es causado por el sistema operativo llamado -viewForZoomingInScrollView. Si su delegado es nulo, esta llamada no se realiza, por lo que la vista de zoom está deshabilitada. –

+0

¡Muchas gracias! Es realmente cierto. ¿Pero por qué sucede esto? Esto no puede ser asunto de delegado. – Yeung

1

Aquí hay otro ejemplo que hice. Esta usa una imagen que está incluida en la carpeta de recursos. Comparado con el que tienes, agrega el UIImageView a la vista como una subvista y luego cambia el zoom a toda la vista.

-(void)viewDidLoad{ 

[super viewDidLoad]; 

UIImage *image = [UIImage imageNamed:@"random.jpg"]; 

imageView = [[UIImageView alloc] initWithImage:image]; 

[self.view addSubview:imageView]; 

[(UIScrollView *) self.view setContentSize:[image size]]; 

[(UIScrollView *) self.view setMaximumZoomScale:2.0]; 

[(UIScrollView *) self.view setMinimumZoomScale:0.5]; 

} 
+0

No puedo pensar por qué eso podría causar ningún problema, pero en mi desesperación lo intenté de todos modos. Resultado sin cambios – iFloh

1

Sé que esto es bastante tarde como respuestas vienen, pero el problema es que el código llama zoomScale antes de que fragüe el delegado. Tiene razón, las otras cosas allí no requieren el delegado, pero zoomScale sí lo hace porque tiene que poder devolver la llamada cuando se completa el zoom. Al menos así es como creo que funciona.

+0

Bienvenido a SO @turboc! Este comentario es indudablemente útil, pero para referencia futura, agregue comentarios como este en la sección "comentarios" debajo de la publicación correspondiente (en este caso, la publicación que ya se aceptó como respuesta). – ewitkows

0

Mi código debe estar completamente loco porque la escala que uso es completamente opuesta a lo que están haciendo los tutoriales y otros. Para mí, minScale = 1 que indica que la imagen está completamente alejada y se ajusta al UIImageView que lo contiene.

Aquí está mi código:

[self.imageView setImage:image]; 
    // Makes the content size the same size as the imageView size. 
    // Since the image size and the scroll view size should be the same, the scroll view shouldn't scroll, only bounce. 
    self.scrollView.contentSize = self.imageView.frame.size; 

    // despite what tutorials say, the scale actually goes from one (image sized to fit screen) to max (image at actual resolution) 
    CGRect scrollViewFrame = self.scrollView.frame; 
    CGFloat minScale = 1; 
    // max is calculated by finding the max ratio factor of the image size to the scroll view size (which will change based on the device) 
    CGFloat scaleWidth = image.size.width/scrollViewFrame.size.width; 
    CGFloat scaleHeight = image.size.height/scrollViewFrame.size.height; 
    self.scrollView.maximumZoomScale = MAX(scaleWidth, scaleHeight); 
    self.scrollView.minimumZoomScale = minScale; 
    // ensure we are zoomed out fully 
    self.scrollView.zoomScale = minScale; 

Esto funciona como espero. Cuando cargo la imagen en el UIImageView, está completamente alejada. Luego puedo hacer un acercamiento y luego puedo hacer una panorámica de la imagen.

Cuestiones relacionadas