UIScrollView Zooming & contentInset UIScrollView Zooming & contentInset xcode xcode

UIScrollView Zooming & contentInset


Your approach looks correct. You need to update your code as below.

    func scrollViewDidZoom(scrollView: UIScrollView) {        if scrollView.zoomScale > 1 {                if let image = imageView.image {                        let ratioW = imageView.frame.width / image.size.width            let ratioH = imageView.frame.height / image.size.height                        let ratio = ratioW < ratioH ? ratioW:ratioH                        let newWidth = image.size.width*ratio            let newHeight = image.size.height*ratio                        let left = 0.5 * (newWidth * scrollView.zoomScale > imageView.frame.width ? (newWidth - imageView.frame.width) : (scrollView.frame.width - scrollView.contentSize.width))            let top = 0.5 * (newHeight * scrollView.zoomScale > imageView.frame.height ? (newHeight - imageView.frame.height) : (scrollView.frame.height - scrollView.contentSize.height))                        scrollView.contentInset = UIEdgeInsetsMake(top, left, top, left)        }    } else {        scrollView.contentInset = UIEdgeInsetsZero    }}

Swift 5

    func scrollViewDidZoom(scrollView: UIScrollView) {        if scrollView.zoomScale > 1 {        if let image = imageView.image {            let ratioW = imageView.frame.width / image.size.width            let ratioH = imageView.frame.height / image.size.height            let ratio = ratioW < ratioH ? ratioW:ratioH            let newWidth = image.size.width*ratio            let newHeight = image.size.height*ratio            let left = 0.5 * (newWidth * scrollView.zoomScale > imageView.frame.width ? (newWidth - imageView.frame.width) : (scrollView.frame.width - scrollView.contentSize.width))            let top = 0.5 * (newHeight * scrollView.zoomScale > imageView.frame.height ? (newHeight - imageView.frame.height) : (scrollView.frame.height - scrollView.contentSize.height))            scrollView.contentInset = UIEdgeInsets(top: top, left: left, bottom: top, right: left)        }    } else {        scrollView.contentInset = .zero    }}


Swift 5

func scrollViewDidZoom(_ scrollView: UIScrollView) {    if scrollView.zoomScale > 1 {        if let image = imageView.image {            let ratioW = imageView.frame.width / image.size.width            let ratioH = imageView.frame.height / image.size.height            let ratio = ratioW < ratioH ? ratioW : ratioH            let newWidth = image.size.width * ratio            let newHeight = image.size.height * ratio            let left = 0.5 * (newWidth * scrollView.zoomScale > imageView.frame.width ? (newWidth - imageView.frame.width) : (scrollView.frame.width - scrollView.contentSize.width))            let top = 0.5 * (newHeight * scrollView.zoomScale > imageView.frame.height ? (newHeight - imageView.frame.height) : (scrollView.frame.height - scrollView.contentSize.height))            scrollView.contentInset = UIEdgeInsets(top: top, left: left, bottom: top, right: left)        }    } else {        scrollView.contentInset = UIEdgeInsets.zero    }}


for swift 4

func scrollViewDidZoom(_ scrollView: UIScrollView) {        if scrollView.zoomScale > 1 {            if let image = self.imageViewZoom.image {                let ratioW = self.imageViewZoom.frame.width / image.size.width                let ratioH = self.imageViewZoom.frame.height / image.size.height                let ratio = ratioW < ratioH ? ratioW:ratioH                let newWidth = image.size.width*ratio                let newHeight = image.size.height*ratio                let left = 0.5 * (newWidth * scrollView.zoomScale > self.imageViewZoom.frame.width ? (newWidth - self.imageViewZoom.frame.width) : (scrollView.frame.width - scrollView.contentSize.width))                let top = 0.5 * (newHeight * scrollView.zoomScale > self.imageViewZoom.frame.height ? (newHeight - self.imageViewZoom.frame.height) : (scrollView.frame.height - scrollView.contentSize.height))                scrollView.contentInset = UIEdgeInsetsMake(top, left, top, left)            }        } else {            scrollView.contentInset = UIEdgeInsets.zero        }    }