         set(newHeight) {
             super.height = newHeight
             self._scrollView.height = newHeight
-            self._updateZoomScalesAndAdjustContentPosition()
-        }
+            self._updateZoomScalesAndAdjustScrollViewContentInsets()
+        }
+    }
+}
+
+
+// MARK: Did Zoom in ScrollView
+private extension ZoomView {
+    func _didZoom(in scrollView: UIScrollView) {
+        self._adjustScrollViewContentInsets()
+        self.delegate?.zoomed(to: scrollView.zoomScale, in: self)
     }
 }
 

        
        UIView.animate(withDuration: animationDuration) {
            self._scrollView.zoomScale = self._scrollView.minimumZoomScale
            self._adjustContentPosition()
        }
    }
}


// MARK: Adjust Content Position / Update Zoom Scales
private extension ZoomView {
    func _updateZoomScalesAndAdjustScrollViewContentInsets() {
        self._updateZoomScales()
        self._adjustScrollViewContentInsets()
    }
    
    func _adjustScrollViewContentInsets() {
        let centerH: Bool = self.centerHorizontally
        let centerV: Bool = self.centerVertically
        
        guard centerH || centerV else {
            return
        }
        
        let scrollView: UIScrollView = self._scrollView
        let boundsSize: CGSize = scrollView.bounds.size
        let contentSize: CGSize = scrollView.contentSize
        
        if centerH {
            let leftInset: CGFloat = (boundsSize.width - contentSize.width) / 2
            scrollView.contentInset.left = max(0, leftInset)
        }
        
        if centerV {
            let topInset: CGFloat = (boundsSize.height - contentSize.height) / 2
            scrollView.contentInset.top = max(0, topInset)
        }
    }

    func _updateZoomScales() {
