2012-02-21 23 views
5

Tengo un uiscrollview y hay una uiimageview dentro de él. Quiero que el usado sea capaz de acercar la imagen porque es una imagen grande. la vista de desplazamiento solo necesita desplazarse verticalmente, no horizontalmente.uiscrollview acercar y alejar no funciona correctamente

antes de añadir el efecto de enfoque que tenía el siguiente código y funcionó como quería,

-(void)viewDidLoad 
{ 
[scrollView setScrollEnabled:YES]; 
[scrollView setContentSize:CGSizeMake(320, 1690)]; 
} 

por lo que hice algunas investigaciones y terminó con el código siguiente para activar el zoom pizca de entrada y salida,

-(void)viewDidLoad 
{ 
scrollView.scrollEnabled = YES; 

[scrollView setContentSize:CGSizeMake(320, 1690)]; 
scrollView.delegate = self; 
// scrollView.contentSize = instImage.frame.size; 
scrollView.minimumZoomScale = scrollView.frame.size.width/instImage.frame.size.width; 
scrollView.maximumZoomScale = 2.0; 
[scrollView setZoomScale:scrollView.minimumZoomScale]; 
[[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; 

} 


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 

return instImage; 
} 


- (CGRect)centeredFrameForScrollView:(UIScrollView *)scroll andUIView:(UIView *)rView { 

CGSize boundsSize = scroll.bounds.size; 
CGRect frameToCenter = rView.frame; 

// center horizontally 
if (frameToCenter.size.width < boundsSize.width) { 

    frameToCenter.origin.x = ((boundsSize.width - frameToCenter.size.width)/2); 

}else { 

    frameToCenter.origin.x = 0; 
} 

return frameToCenter; 
} 


- (void)scrollViewDidZoom:(UIScrollView *)scrollV { 

instImage.frame = [self centeredFrameForScrollView:scrollV andUIView:instImage];; 
} 

Ahora tengo los siguientes problemas y no puedo averiguar lo que está mal,

  1. cuando la vista se acaba de cargar antes de cualquier pellizco, la vista de desplazamiento no se desplaza completamente hasta el final de la imagen.

  2. cuando se pellizca para acercar, se desplaza hacia la izquierda y hacia la derecha y arriba y abajo de la imagen, pero aún no se desplaza hacia abajo hasta el final de la imagen, pero aún más de lo que originalmente el principio.

  3. cuando alejo, todo se detiene. no se puede acercar ni alejar, ya ni siquiera se desplaza. totalmente cerrado.

Realicé algunas investigaciones y encontré la siguiente publicación. https://stackoverflow.com/a/6384834/1103257

pero no sé dónde encontraría NSDefaultRunLoopMode o incluso cómo buscarlo para averiguar si esto puede resolverlo o no.

Respuesta

5

Finalmente lo tengo. ¡Esta solución funciona perfectamente!

en su archivo .h

@interface scrollViewController : UIViewController <UIScrollViewDelegate>{ 

     float oldScale; 

     IBOutlet UIScrollView *scrollView; 
     IBOutlet UIImageView *image; 
} 

@end 

y sólo tiene que conectar la imagen a la UIImageView que tiene la foto que desea utilizar el zoom dentro y fuera y está dentro de su ScrollView. luego, conecta la vista de desplazamiento a tu vista de desplazamiento en tu interfaz.

en su archivo .m

@implementation scrollViewController 


-(void)viewDidLoad 
{ 
[super viewDidLoad]; 

scrollView.scrollEnabled = YES; 
scrollView.minimumZoomScale=1.0; 
scrollView.maximumZoomScale=4.0; 
[scrollView setContentSize:CGSizeMake(320, 1700)]; 
scrollView.delegate=self; 

} 

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

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollV withView:(UIView *)view atScale:(float)scale 
{ 
    [scrollView setContentSize:CGSizeMake(scale*320, scale*1700)]; 
} 

    @end 

esperanza esto ayuda.

+0

Gracias @Mona. También me enfrenté al mismo problema anterior. Esto funciona para mi. :) – iKT

1

Aquí es cómo implementar un punto de vista de desplazamiento para desplazarse por una imagen grande en viewDidLoad

UIImage *img = [UIImage imageNamed:@"image_name.png"]; 
largeImageView = [[UIImageView alloc] initWithImage:img]; 

[self.view insertSubview: largeImageView atIndex:0]; 
[(UIScrollView *)self.view setContentSize:[img size]]; 
[(UIScrollView *)self.view setMaximumZoomScale:2.2]; 
[(UIScrollView *)self.view setMinimumZoomScale:0.3]; 
[(UIScrollView *)self.view setCanCancelContentTouches:YES]; 
[(UIScrollView *)self.view setBounces:YES]; 
[mapImageView setUserInteractionEnabled:YES]; 

Entonces también tengo el método viewForZoomingInScrollView:

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

función que scrollViewDidZoom es innecesario en este momento . Implemento algo similar para mantener la imagen centrada cuando se ve toda la imagen, pero ahora mismo no me preocuparía si fuera usted.

+0

no funcionó como se esperaba – Mona

+1

Solo para estar seguro, ¿está trabajando en iOS 5? ¿Y su controlador de vista es un delegado de ? – atreat

+0

sí a ambas preguntas – Mona

1

mismo problema pero nos dieron una solución simple, basta con establecer la vista de imagen para la interacción del usuario habilitado:

[self.imageView setUserInteractionEnabled:YES]; 
0

El problema para mí fue que estaba usando la disposición automática y no se ponía el delegado de zoom UIScrollView. Estaba usando un UIViewController personalizado que también era un UIScrollViewDelegate. He encontrado que puede ya sea en código configurado el delegado:

func viewDidLoad() { scrollView.delegate = self } 

O en el guión establecido por el delegado seleccionar el UIScrolView y en el inspector de conexiones arrastrar el delegado para que señale a la UIViewController.

Cuestiones relacionadas