Search code examples
iosswiftuiimageviewuipinchgesturerecognizer

pinch gesture recognizer on expanded image


I have added a tap gesture recognizer action to my image view. Once the image is tapped it expands to full screen and then dismisses full screen once tapped again. How would I add pinch to zoom to the image after it is already expanded. Here is my code for making the image full screen.

//expand image


let newImageView: UIImageView!

@IBAction func imageTapped(_ sender: UITapGestureRecognizer)




{
    let imageView = sender.view as! UIImageView

    let scrollView = UIScrollView(frame: self.view.frame)


    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = self.view.frame
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true


    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    scrollView.addGestureRecognizer(tap)


    scrollView.delegate = self
    scrollView.minimumZoomScale = 1.0
    scrollView.maximumZoomScale = 5.0

    scrollView.addSubview(newImageView)

    self.view.addSubview(scrollView)
}

func viewForZooming(in scrollView: UIScrollView) -> UIView?
{
    return newImageView;
}

func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    sender.view?.removeFromSuperview()
}

Solution

  • When you wanna show full image, let use scrollview instead imageView

    let newImageView: UIImageView!
    
    @IBAction func imageTapped(_ sender: UITapGestureRecognizer)
    {
        let imageView = sender.view as! UIImageView
    
        let scrollView = UIScrollView(frame: self.view.frame);
    
        newImageView = UIImageView(image: imageView.image)
        newImageView.frame = self.view.frame
        newImageView.backgroundColor = .black
        newImageView.contentMode = .scaleAspectFit
        newImageView.isUserInteractionEnabled = true
    
    
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        scrollView.addGestureRecognizer(tap)
    
        scrollView.delegate = self
        scrollView.minimumZoomScale = 1.0
        scrollView.maximumZoomScale = 5.0
    
        scrollView.addSubview(newImageView)
        self.view.addSubview(scrollView)
    }
    

    and remember viewForZooming delegate func

     func viewForZooming(in scrollView: UIScrollView) -> UIView?
     {
         return newImageView;
     }