Mc.Lover
Mc.Lover

Reputation: 4994

Issue with UIPinchGestureRecognizer and UIImageView

I am trying to pinch an image via UIPinchGestureRecognizer but , the problem is my code does not work properly and actually it could not zoom my image

-(void) pinching: (UIPinchGestureRecognizer *) sender {

    CGAffineTransform myTransformation =
    CGAffineTransformMakeScale(sender.scale, sender.scale);
    sender.view.transform = myTransformation;
}


- (void)viewDidLoad
{
  UIPinchGestureRecognizer *pinch =
    [[UIPinchGestureRecognizer alloc]
     initWithTarget:self
     action:@selector(pinching:)];

    pinch.delegate = self;

    [imageBG addGestureRecognizer:pinch];

    [imageBG setUserInteractionEnabled:YES];
    [imageBG setMultipleTouchEnabled:YES];
}

Upvotes: 0

Views: 2322

Answers (3)

Paras Joshi
Paras Joshi

Reputation: 20551

just take one variable in .h file like bellow..

CGFloat lastScale;

and use this type of code...

in viewWillAppear: method just add it..

- (void)viewWillAppear:(BOOL)animated
{
     UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
        [pinchRecognizer setDelegate:self];
        [yourImageView addGestureRecognizer:pinchRecognizer];
}

-(void)scale:(id)sender {
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {

            lastScale = 1.0;
            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];
        yourImageView.transform = newTransform

        lastScale = [(UIPinchGestureRecognizer*)sender scale];
}

try this code also..

Upvotes: 1

zahreelay
zahreelay

Reputation: 1742

You need to add a scrollView to enable zooming. Add your imageView as a subView of the scroll view. Set the delegate for UIScrollViewDelegate to self. Implement the delegate methods.

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

{
    //return the imageview here
    return self.imageView;

}

Scale your imageview here:

- (CGRect)zoomRectForScrollView:(UIScrollView *)scrollView withScale:(float)scale withCenter:(CGPoint)center

You can refer this example from Apple .

Upvotes: -1

Ismael
Ismael

Reputation: 3937

Try using a UIScrollView.

To do this, create it

self.scrollView = [[UIScrollView alloc] initWithFrame:...];
self.scrollView.delegate = self;
self.scrollView.maximumZoomScale = 2.0; // adjust as you need
self.scrollView.minimumZoomScale = 0.5; // adjust as you need
[self.scrollView addSubview:self.imageView];

and add the delegate method:

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

Upvotes: 1

Related Questions