關(guān)鍵代碼
繼承UIScrollViewDelegate
協(xié)議,重寫viewForZooming疚顷,scrollViewDidZoom
兩個(gè)方法
extension ScrollView: UIScrollViewDelegate {
public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView //被放大縮小的視圖
}
// 重置imageView的中心
public func scrollViewDidZoom(_ scrollView: UIScrollView) {
let offsetX = max((bounds.width - contentSize.width) * 0.5, 0)
let offsetY = max((bounds.height - contentSize.height) * 0.5, 0)
imageView.center = CGPoint(x: contentSize.width * 0.5 + offsetX, y: contentSize.height * 0.5 + offsetY)
}
}
UIScrollView要放大縮小零截,必須設(shè)置maximumZoomScale
帖世,minimumZoomScale
UIScrollView添加雙擊手勢(shì)
lazy var doubleTapGestureRecognizer: UITapGestureRecognizer = { [weak self] in
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ZoomingImageView.doubleTapped(_:)))
gestureRecognizer.numberOfTapsRequired = 2
return gestureRecognizer
}()
雙擊之后觸發(fā)的方法
@objc fileprivate func doubleTapped(_ gestureRecognizer: UITapGestureRecognizer) {
let location = gestureRecognizer.location(in: imageView)
if zoomScale > minimumZoomScale {
setZoomScale(minimumZoomScale, animated: true)
} else {
zoom(to: CGRect(x: location.x, y: location.y, width: 1, height: 1), animated: true)
}
}