7

I have an UIImageView. I need pinch zoom.

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 90, 320, 38)];
[imageView setImage:[UIImage imageNamed:@"accesspanel.png"]];
[self.view addSubview: imageView];
TheTiger
  • 13,264
  • 3
  • 57
  • 82
janagowtham
  • 167
  • 1
  • 1
  • 10
  • possible duplicate of [How to zoom in/out an UIImage object when user pinches screen?](http://stackoverflow.com/questions/500027/how-to-zoom-in-out-an-uiimage-object-when-user-pinches-screen) – CRDave Mar 13 '14 at 11:12
  • http://stackoverflow.com/questions/19840507/how-i-can-pinch-zoom-uiimage-without-using-uiimageview – CRDave Mar 13 '14 at 11:13
  • http://stackoverflow.com/questions/21579882/ios-show-uiimage-full-screen-with-zooming-pinch-and-double-tap-enabled – CRDave Mar 13 '14 at 11:13
  • First search on internet and try something and than if u don't get solution ask here. Directly asking question here is bad habit. You ma get some downvote for this. – CRDave Mar 13 '14 at 11:14
  • As You are newB You need to read the [FAQ](http://careers.stackoverflow.com/faq) – TheTiger Mar 13 '14 at 11:21

3 Answers3

11

You can add the imageview inside a scrollview and can use Scrollview delegate for the this purpose

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

- (void)viewDidLoad 
{
    [super viewDidLoad];

    self.scrollView.minimumZoomScale=0.5;

    self.scrollView.maximumZoomScale=6.0;

    self.scrollView.contentSize=CGSizeMake(1280, 960);

    self.scrollView.delegate=self;
}
Hardik Vyas
  • 1,973
  • 1
  • 20
  • 43
9

First ---> ADD Pinch Gesture to your Image View -:

UIPinchGestureRecognizer *pgr = [[UIPinchGestureRecognizer alloc] 
    initWithTarget:self action:@selector(handlePinchGesture:)];
pgr.delegate = self;
[imageView addGestureRecognizer:pgr];

Second ---> Implement Pinch Gesture -:

- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer {

     if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
     // Reset the last scale, necessary if there are multiple objects with different scales.
     lastScale = [gestureRecognizer scale];
     }

     if ([gestureRecognizer state] == UIGestureRecognizerStateBegan ||
     [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

      CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];

     // Constants to adjust the max/min values of zoom.
     const CGFloat kMaxScale = 2.0;
     const CGFloat kMinScale = 1.0;

      CGFloat newScale = 1 -  (lastScale - [gestureRecognizer scale]); // new scale is in the range (0-1)
      newScale = MIN(newScale, kMaxScale / currentScale);
      newScale = MAX(newScale, kMinScale / currentScale);
      CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale);
      [gestureRecognizer view].transform = transform;

      lastScale = [gestureRecognizer scale];  // Store the previous. scale factor for the next pinch gesture call
      }
}
Ahmad Farrag
  • 234
  • 2
  • 8
Vizllx
  • 9,135
  • 1
  • 41
  • 79
1
UIPinchGestureRecognizer *pinchGestureRecognizer=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureDetected:)];
[pinchGestureRecognizer setDelegate:self];
[_third_imageview addGestureRecognizer:pinchGestureRecognizer];

- (void)pinchGestureDetected:(UIPinchGestureRecognizer *)recognizer
{
    UIGestureRecognizerState state = [recognizer state];

    if (state == UIGestureRecognizerStateBegan || state ==UIGestureRecognizerStateChanged)
    {
        CGFloat scale = [recognizer scale];
        [recognizer.view    setTransform:CGAffineTransformScale(recognizer.view.transform, scale, scale)];
        [recognizer setScale:1.0];
    }

}
Hardik Vyas
  • 1,973
  • 1
  • 20
  • 43
Ramani Hitesh
  • 214
  • 3
  • 15