Skip to content

Instantly share code, notes, and snippets.

@mryssng
Last active September 24, 2018 12:30
Show Gist options
  • Save mryssng/0c95d0c66eeb85c0c69ac4f74c5ac91f to your computer and use it in GitHub Desktop.
Save mryssng/0c95d0c66eeb85c0c69ac4f74c5ac91f to your computer and use it in GitHub Desktop.
Gesture Image Zoom View Controller
//
// GestureImageZoomViewController.swift
//
// Created by Ytse Jam on 2017/10/21.
// Copyright © 2017 Ytse Jam. Licensed under MIT.
//
import UIKit
class GestureImageZoomViewController: UIViewController, UIScrollViewDelegate {
// ***** Important *****
// Need to set UIImageView as a child of UIScrollView on Storyboad
@IBOutlet var imageView: UIImageView!
@IBOutlet var scrollView: UIScrollView!
var params = SelectionParameters()
var image: UIImage? = nil
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = self.image
self.scrollView.delegate = self
// ***** Important *****
// Need to checkbox ON.(Storyboad:Attributes inspector -> View -> Intaraction -> User Intaraction Enabled -> True)
// Need to set values below.
// Storyboad:Attributes inspector -> Scroll View -> Zoom -> Min & Max
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.doubleTap))
doubleTapGesture.numberOfTapsRequired = 2
self.imageView.addGestureRecognizer(doubleTapGesture)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return self.imageView
}
@objc func doubleTap(gesture: UITapGestureRecognizer) -> Void {
if (self.scrollView.zoomScale < self.scrollView.maximumZoomScale) {
let newScale = self.scrollView.zoomScale * 3
let zoomRect = self.zoomRectForScale(scale: newScale, center: gesture.location(in: gesture.view))
self.scrollView.zoom(to: zoomRect, animated: true)
} else {
self.scrollView.setZoomScale(1.0, animated: true)
}
}
func zoomRectForScale(scale:CGFloat, center: CGPoint) -> CGRect{
let size = CGSize(
width: self.scrollView.frame.size.width / scale,
height: self.scrollView.frame.size.height / scale
)
return CGRect(
origin: CGPoint(
x: center.x - size.width / 2.0,
y: center.y - size.height / 2.0
),
size: size
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment