Zoom UIImageView y UIScrollView

¿Realmente necesito un UIPinchGestureRecognizer dentro de un UIScrollView para que funcione el pellizco? En caso afirmativo, ¿cómo lo hago? Estoy intentando implementar lo que flipboard tiene, donde básicamente hace zoom en una image y tiene la capacidad de desplazamiento después de hacer zoom. ¿Cómo hago eso?

ACTUALIZAR:

Aquí hay un código que tengo que no llama al delegado de vista de desplazamiento

CGRect imgFrame; imgFrame.size.width = originalImageSize.width; imgFrame.size.height = originalImageSize.height; imgFrame.origin.x = imageOriginPoint.x; imgFrame.origin.y = imageOriginPoint.y; NSData *data = [request responseData]; UIImage * image = [UIImage imageWithData:data]; imageView = [[UIImageView alloc] initWithImage:image]; [imageView setUserInteractionEnabled:YES]; [imageView setBackgroundColor:[UIColor clearColor]]; [imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; [imageView setFrame:CGRectMake(0, 0, imgFrame.size.width, imgFrame.size.height)]; UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:imageView.frame]; imgScrollView.delegate = self; imgScrollView.showsVerticalScrollIndicator = NO; imgScrollView.showsHorizontalScrollIndicator = NO; [imgScrollView setScrollEnabled:YES]; [imgScrollView setClipsToBounds:YES]; [imgScrollView addSubview:imageView]; [imgScrollView setBackgroundColor:[UIColor blueColor]]; [imgScrollView setMaximumZoomScale:1.0]; 

Todo lo que necesita hacer es agregar su UIImageView (o cualquier vista que desee ampliar) dentro de su UIScrollView .

Establezca su maximumZoomScale en su UIScrollView a cualquier valor superior a 1.0f.

Establezca como delegado de su UIScrollView y devuelva UIImageView en el método de delegado viewForZooming.

Eso es. No se necesita un gesto de pellizco, ni nada. UIScrollView maneja el zoom de pellizco para usted.

Hice un visor de imágenes personalizado no hace mucho time sin los reconocedores de pizca. Solo UIImageView en la parte superior de UIScrollView. Allí pasa una cadena con un enlace a la image y también tiene una barra de progreso. Una vez que la image está terminada, se muestra la image. Aquí está el código:

 -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.theImageView; } - (CGRect)centenetworkingFrameForScrollView:(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; } // center vertically if (frameToCenter.size.height < boundsSize.height) { frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2; } else { frameToCenter.origin.y = 0; } return frameToCenter; } -(void)scrollViewDidZoom:(UIScrollView *)scrollView { self.theImageView.frame = [self centenetworkingFrameForScrollView:self.theScrollView andUIView:self.theImageView]; } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [self.resourceData setLength:0]; self.filesize = [NSNumber numberWithLongLong:[response expectedContentLength]]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.resourceData appendData:data]; NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.resourceData length]]; self.progressBar.progress = [resourceLength floatValue] / [self.filesize floatValue]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { self.theImage = [[UIImage alloc]initWithData:resourceData]; self.theImageView.frame = CGRectMake(0, 0, self.theImage.size.width, self.theImage.size.height); self.theImageView.image = self.theImage; self.theScrollView.minimumZoomScale = self.theScrollView.frame.size.width / self.theImageView.frame.size.width; self.theScrollView.maximumZoomScale = 2.0; [self.theScrollView setZoomScale:self.theScrollView.minimumZoomScale]; self.theScrollView.contentSize = self.theImageView.frame.size; self.theLabel.hidden = YES; self.progressBar.hidden = YES; } -(void)setImageInImageView { NSURLRequest *req = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:self.imageLink]]; NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:req delegate:self]; if (conn) { self.resourceData = [NSMutableData data]; } else { NSLog(@"Connection failed: IMageViewerViewController"); } } -(void)loadView { self.filesize = [[NSNumber alloc]init]; self.progressBar = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleBar]; self.progressBar.frame = CGRectMake(20, 240, 280, 40); [self.progressBar setProgress:0.0]; self.theImageView = [[[UIImageView alloc]initWithFrame:[[UIScreen mainScreen]applicationFrame]]autorelease]; self.theScrollView = [[[UIScrollView alloc]initWithFrame:[[UIScreen mainScreen]applicationFrame]]autorelease]; self.theScrollView.delegate = self; [self.theScrollView addSubview:self.theImageView]; self.view = self.theScrollView; self.theLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 200, 320, 40)]; self.theLabel.font = [UIFont boldSystemFontOfSize:15.0f]; self.theLabel.text = @"Please wait, file is being downloaded"; self.theLabel.textAlignment = UITextAlignmentCenter; self.theLabel.hidden = NO; [self.view addSubview:self.progressBar]; [self.view bringSubviewToFront:self.progressBar]; [self.view addSubview:self.theLabel]; [self.view bringSubviewToFront:self. theLabel]; [self performSelectorOnMainThread:@selector(setImageInImageView) withObject:nil waitUntilDone:NO]; } 

Y el file de encabezado:

 @interface ImageViewerViewController : UIViewController<UIScrollViewDelegate, NSURLConnectionDelegate, NSURLConnectionDataDelegate> @property (nonatomic, retain) IBOutlet UIImageView *theImageView; @property (nonatomic, retain) IBOutlet UIScrollView *theScrollView; @property (nonatomic, retain) NSString *imageLink; @property (nonatomic, retain) UIImage *theImage; @property (nonatomic, retain) UILabel *theLabel; @property (nonatomic, retain) UIProgressView *progressBar; @property (nonatomic, retain) NSMutableData *resourceData; @property (nonatomic, retain) NSNumber *filesize; @end 

Espero eso ayude

Swift 2.0 Pinch-zoom Imagen en Scrollview Steps (Swift 2.0)

1. Desplazar las restricciones de vista

introduzca la descripción de la imagen aquí

2. Agregue ImageView en ScrollView y establezca restricciones.

introduzca la descripción de la imagen aquí

3. Tome IBOutlets

 IBOutlet UIScrollView * bgScrollView; IBOutlet UIImageView * imageViewOutlet; 

4. viewDidLoad Method

 - (void)viewDidLoad { [super viewDidLoad]; float minScale=bgScrollView.frame.size.width / imageViewOutlet.frame.size.width; bgScrollView.minimumZoomScale = minScale; bgScrollView.maximumZoomScale = 3.0; bgScrollView.contentSize = imageViewOutlet.frame.size; bgScrollView.delegate = self; } 

5. Desplazar el método de vista de delegado

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

Creo que esta respuesta puede ser innecesaria, pero he tenido problemas similares a @adit y he resuelto de una manera muy simple (creo) y tal vez alguien con desafíos similares pueda usarlo:

 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor yellowColor]; UIImage *imageToLoad = [UIImage imageNamed:@"background_green"]; self.myImageView = [[UIImageView alloc]initWithImage:imageToLoad]; self.myScrollView = [[UIScrollView alloc]initWithFrame:self.view.bounds]; [self.myScrollView addSubview:self.myImageView]; self.myScrollView.contentSize = self.myImageView.bounds.size; self.myScrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; self.myScrollView.minimumZoomScale = 0.3f; self.myScrollView.maximumZoomScale = 3.0f; self.myScrollView.delegate = self; [self.view addSubview:self.myScrollView]; } - (UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView { NSLog(@"viewForZoomingInScrollView"); return self.myImageView; } 

Mi problema fue muy simple, había olvidado agregar self.myScrollView.delegate = self; , que fue la razón por la que tuve problemas. Me tomó una eternidad imaginar ese simple problema, supongo que no vi el bosque para todos los treees 🙂

Cuando estaba desarrollando mi visor de PDF de zoom en un UIScrollView, descubrí que cuando lo ejecutaba en el teléfono, realmente ya tenía el zoom implementado como parte del teléfono. Pero puedes echar un vistazo a esto, http://developer.apple.com/library/ios/#samplecode/ZoomingPDFViewer/Introduction/Intro.html , es un fragment de código de ejemplo que intenta implementar la funcionalidad de zoom, esto es que quiero que comencé