comment faire un ImageView zoomable avec ou sans ScrollView.?

J'ai un UImageView dans mon IB et ai ajouté une image de carte sur ce UImageView . Je veux que cette image soit pincée.

Voici mon code:

 - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Map"; self.mapImageView.contentMode = UIViewContentModeScaleAspectFit; [self.mapScrollView addSubview:self.mapImageView]; [self.mapScrollView setContentSize:CGSizeMake(self.mapImageView.frame.size.width, self.mapImageView.frame.size.height)]; [self.mapScrollView setMinimumZoomScale:1.0]; [self.mapScrollView setMaximumZoomScale:4.0]; } - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.mapImageView; } 

mais cela n'aide pas, je peux voir un UIScrollView venir mais rien n'arrive à mon image.
Merci d'avance.

Ajoutez UIScrollViewDelegate dans votre file ViewController.h

puis ajoutez le code suivant à votre file ViewController.m

Pas besoin d'append UIPinchGestureRecognizer si vous utilisez ce code

  - (void)scrollViewDidZoom:(UIScrollView *)scrollView { UIView* zoomView = [scrollView.delegate viewForZoomingInScrollView:scrollView]; CGRect zoomViewFrame = zoomView.frame; if(zoomViewFrame.size.width < scrollView.bounds.size.width) { zoomViewFrame.origin.x = (scrollView.bounds.size.width - zoomViewFrame.size.width) / 2.0; } else { zoomViewFrame.origin.x = 0.0; } if(zoomViewFrame.size.height < scrollView.bounds.size.height) { zoomViewFrame.origin.y = (scrollView.bounds.size.height - zoomViewFrame.size.height) / 2.0; } else { zoomViewFrame.origin.y = 0.0; } zoomView.frame = zoomViewFrame; } 

change viewDidLoad comme suit

 - (void)viewDidLoad { [super viewDidLoad]; self.mapScrollView.delegate = self; self.mapScrollView.minimumZoomScale = 1.0; self.mapScrollView.maximumZoomScale = 4.0; UIImage * myImage= [UIImage imageNamed:@"Background.png"]; //add your image here [self.mapImageView setImage:myImage]; [self.mapImageView sizeToFit]; self.mapScrollView.contentSize = myImage.size; } 

Précisez l'imageAfficher pour zoomer ici

 - (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.mapImageView; } 

Pour éviter le comportement étrange de UIScrollView sur zoomimg, utilisez cette méthode

 - (void)view:(UIView*)view setCenter:(CGPoint)centerPoint { CGRect viewFrame = view.frame; CGPoint contentOffset = self.mapScrollView.contentOffset; CGFloat x = centerPoint.x - viewFrame .size.width / 2.0; CGFloat y = centerPoint.y - viewFrame .size.height / 2.0; if(x < 0) { contentOffset.x = -x; viewFrame .origin.x = 0.0; } else { viewFrame .origin.x = x; } if(y < 0) { contentOffset.y = -y; viewFrame .origin.y = 0.0; } else { viewFrame .origin.y = y; } view.frame = viewFrame ; self.mapScrollView.contentOffset = contentOffset; } 

Ensuite, appelez la méthode ci-dessus sur viewDidAppear

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; CGPoint centerPoint = CGPointMake(CGRectGetMidX(self.mapScrollView.bounds), CGRectGetMidY(self.mapScrollView.bounds)); [self view:self.mapImageView setCenter:centerPoint]; } 

jetez un oeil à ce lien si vous avez besoin de plus de précisions. J'ai appris cette technique à partir de ce lien.

essayer avec ça

  //At ViewDidLoad (OR whare you create your mapImageView) UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)]; [pinchRecognizer setDelegate:self]; [mapImageView addGestureRecognizer:pinchRecognizer]; mapImageView.userInteractionEnabled=YES; -(void)scale:(id)sender { [YourView bringSubviewToFront:[(UIPinchGestureRecognizer*)sender view]]; if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) { lastScale = 1.0; //global float variable. return; } CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]); CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform; CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale); [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform]; } 

pour le faire sans scrollView , ajoutez cet extrait à votre class:

 -(void) addGesturesTo : (UIImageView *) imageView{ // Register for double-finger dragging to pan the camera. UIPinchGestureRecognizer* pinchGestureReconizer = [[UIPinchGestureRecognizer alloc] initWithTarget: self action: @selector(handlePich:)]; [imageView addGestureRecognizer:pinchGestureReconizer]; } - (void) handlePich: (UIPinchGestureRecognizer *) pinchGestureRecognizer{ CGFloat scale = pinchGestureRecognizer.scale; [[pinchGestureRecognizer view] setTransform:CGAffineTransformScale([pinchGestureRecognizer view].transform, scale, scale)]; pinchGestureRecognizer.scale = 1.0; } 

Appelez maintenant addGesturesTo avec imageView . Comme:

 [self addGesturesTo:imageView]; 

Pour le faire avec ScrollView: Suivez ces étapes:

  • append scrollView définir déléguer à soi-même
  • Ajouter une imageView inside scrolView
  • implémenter - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; dans votre class et returnnez l' imageView