UIImageView pinch zoom swift
UIImageView pinch zoom with UIScrollView || image zooming ios in swift 3 and Xcode 8 letter Youtube video URL
set uiscrollview Delegate in storyboard
class PhotoDetailViewController: UIViewController, UIScrollViewDelegate { @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var imgPhoto: UIImageView! override func viewDidLoad() { super.viewDidLoad() scrollView.minimumZoomScale = 1.0 scrollView.maximumZoomScale = 6.0 // scrollView.delegate = self - it is set on the storyboard. } func viewForZooming(in scrollView: UIScrollView) -> UIView? { return imgPhoto }
I decided to add the imageView to a UIScrollView. It allows the user to zoom and pan over. Here is the code I used.
in order to set max/min zoom I used :
scrollImg.minimumZoomScale = 1.0 scrollImg.maximumZoomScale = 10.0
here is the rest of the code.
var vWidth = self.view.frame.width var vHeight = self.view.frame.height var scrollImg: UIScrollView = UIScrollView() scrollImg.delegate = self scrollImg.frame = CGRectMake(0, 0, vWidth!, vHeight!) scrollImg.backgroundColor = UIColor(red: 90, green: 90, blue: 90, alpha: 0.90) scrollImg.alwaysBounceVertical = false scrollImg.alwaysBounceHorizontal = false scrollImg.showsVerticalScrollIndicator = true scrollImg.flashScrollIndicators() scrollImg.minimumZoomScale = 1.0 scrollImg.maximumZoomScale = 10.0 defaultView!.addSubview(scrollImg) imageView!.layer.cornerRadius = 11.0 imageView!.clipsToBounds = false scrollImg.addSubview(imageView!)
I also had to add this as well
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { return self.imageView}
Swift 3 & above function prototype
func viewForZooming(in scrollView: UIScrollView) -> UIView? { return self.mainImage}
Supporting Swift 5.1, You can create an extension of UIImageView
, like this:
extension UIImageView { func enableZoom() { let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(startZooming(_:))) isUserInteractionEnabled = true addGestureRecognizer(pinchGesture) } @objc private func startZooming(_ sender: UIPinchGestureRecognizer) { let scaleResult = sender.view?.transform.scaledBy(x: sender.scale, y: sender.scale) guard let scale = scaleResult, scale.a > 1, scale.d > 1 else { return } sender.view?.transform = scale sender.scale = 1 }}