0

I want to crop image in my application same as updated Instagram. I have create one demo for it. But i got 1 issue in this demo. Issue is that, when i zoomIn image and then try to zoom out little bit that time UIImageview zooming out full. Please check demo u got my point which i try to explain This is my demo link https://drive.google.com/file/d/0Bw367uJS6w22OTNwTmdCNW5Ta3M/view?usp=sharing

Monika Patel
  • 2,287
  • 3
  • 20
  • 45
  • 3
    Make a appropriate gif and share it within the question and post relevant code.. External links might not work in future and the question would then be not helpful to others. – Shubhank Mar 29 '16 at 04:34

3 Answers3

2

you can this library if you want instagram like camera and imagepicker

https://github.com/ytakzk/Fusuma

0

In VPImageCropperViewController file You will find a method

- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer you have to change in that code to work zoom out functionality.

- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
    UIView *view = self.showImgView;
    if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) {
        view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
        //pinchGestureRecognizer.scale = 1;
                self.showImgView.contentMode=UIViewContentModeScaleAspectFit;
         NSLog(@"%f",pinchGestureRecognizer.scale);
//        pinchGestureRecognizer.view.transform = CGAffineTransformScale(pinchGestureRecognizer.view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
//        pinchGestureRecognizer.scale = 1;
    }
    else if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded) {

        NSLog(@"original image size%f",self.originalImage.size.width);
        NSLog(@"latestFrame image size%f",self.latestFrame.size.width);
//        NSLog(@"original image size%f",self.originalImage.size.width);
//        NSLog(@"original image size%f",self.originalImage.size.width);

      /*  if(pinchGestureRecognizer.scale <= 1.0)
        {

            // small
            CGRect newFrame = self.showImgView.frame;
            UIImage *img=[self imageWithImage:self.originalImage scaledToSize:self.cropFrame.size];
            newFrame = [self handleScaleOverflow:CGRectMake(0, 0, img.size.width, img.size.height)];
            newFrame = [self handleBorderOverflow:CGRectMake(0, 0, img.size.width, img.size.height)];
            newFrame = [self handleScaleOverflow:newFrame];
            newFrame = [self handleBorderOverflow:newFrame];
            [UIView animateWithDuration:BOUNDCE_DURATION animations:^{
                self.showImgView.frame = newFrame;
                self.latestFrame = newFrame;
                self.showImgView.contentMode=UIViewContentModeScaleAspectFit;

            }];
        }*/


       /* if(pinchGestureRecognizer.scale > 1.0)
        {*/
            // big
            CGRect newFrame = self.showImgView.frame;
            newFrame = [self handleScaleOverflow:newFrame];
            newFrame = [self handleBorderOverflow:newFrame];
            [UIView animateWithDuration:BOUNDCE_DURATION animations:^{
                self.showImgView.frame = newFrame;
                self.latestFrame = newFrame;
            }];
        //}

    }
}

May be it will help you.

0

Do changes in VPImageCropperViewController.m file

// pinch gesture handler
    - (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
    {
        UIView *view = self.showImgView;

        if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) {

            view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
            self.showImgView.contentMode=UIViewContentModeRedraw;

            self.editedImage=self.showImgView.image;
        }
        else if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded) {


            if(view.frame.size.width <= self.cropFrame.size.width && view.frame.size.height <= self.cropFrame.size.height)
            {

                // Zoom out
                CGRect newFrame = self.showImgView.frame;

                UIImage *img=[self imageWithImage:self.originalImage scaledToSize:self.cropFrame.size];

                newFrame = [self handleScaleOverflow:CGRectMake(0, 0, img.size.width, img.size.height)];
                newFrame = [self handleBorderOverflow:CGRectMake(0, 0, img.size.width, img.size.height)];
                newFrame = [self handleScaleOverflow:newFrame];
                newFrame = [self handleBorderOverflow:newFrame];
                [UIView animateWithDuration:BOUNDCE_DURATION animations:^{
                    self.showImgView.frame = newFrame;
                    self.latestFrame = newFrame;
                    self.showImgView.contentMode=UIViewContentModeScaleAspectFit;
                    CGRect cropRect = AVMakeRectWithAspectRatioInsideRect(self.showImgView.image.size, self.showImgView.frame);

                    NSLog(@"frame %f %f ",cropRect.size.width,cropRect.size.height);
                }];
            }
            else

            {
                // Zoom In
                CGRect newFrame = self.showImgView.frame;
                newFrame = [self handleScaleOverflow:newFrame];
                newFrame = [self handleBorderOverflow:newFrame];
                [UIView animateWithDuration:BOUNDCE_DURATION animations:^{
                    self.showImgView.frame = newFrame;
                    self.latestFrame = newFrame;
                }];
            }

        }
    }
Monika Patel
  • 2,287
  • 3
  • 20
  • 45