Search code examples
swiftxcodeuiscrollview

UIScrollView not zooming: What am I missing?


I can scroll, but not zoom. I've seen a lot of identical looking code while searching, but still there's no zoom.

The pinchGestureRecognizer is not nil.

viewForZoomingInScrollView(scrollView: UIScrollView) is not being called.

scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) reports scale = 1.0.

What am I missing here?

(We need to do this programmatically rather than in IB).

import UIKit

class ScrollViewController: UIViewController, UIScrollViewDelegate {

    var scrollView: UIScrollView!
    var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imageView = UIImageView(image: UIImage(named: "image.png"))

        scrollView = UIScrollView(frame: view.bounds)
        scrollView.backgroundColor = UIColor.black
        scrollView.contentSize = imageView.bounds.size
        scrollView.contentOffset = CGPoint(x: 1000, y: 450)

        scrollView.addSubview(imageView)
        view.addSubview(scrollView)

        scrollView.delegate = self
        scrollView.minimumZoomScale = 0.1
        scrollView.maximumZoomScale = 4.0
        scrollView.zoomScale = 1.0
    }

    //delegate
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }
}

Solution

  • Did you convert your codes from an older version of Swift? Because the delegate function for returning the view for zooming is now

    func viewForZooming(in scrollView: UIScrollView) -> UIView?