 
     public weak var delegate: QMUIZoomImageViewDelegate?
 
+    /**
+     * 比如常见的上传头像预览界面中间有一个用于裁剪的方框，则 viewportRect 必须被设置为这个方框在 zoomImageView 坐标系内的 frame，否则拖拽图片或视频时无法正确限制它们的显示范围
+     * @note 图片或视频的初始位置会位于 viewportRect 正中间
+     * @note 如果想要图片覆盖整个 viewportRect，将 contentMode 设置为 UIViewContentModeScaleAspectFill 即可
+     * 如果设置为 CGRectZero 则表示使用默认值，默认值为和整个 zoomImageView 一样大
+     */
+    public var viewportRect: CGRect = .zero
+    
+    public var maximumZoomScale: CGFloat = 0
+    
+    /// 设置当前要显示的图片，会把 livePhoto/video 相关内容清空，因此注意不要直接通过 imageView.image 来设置图片。
+    public weak var image: UIImage?
+    
+    /// 用于显示图片的 UIImageView，注意不要通过 imageView.image 来设置图片，请使用 image 属性。
+    public let imageView = UIImageView()
+    
     /// 设置当前要显示的 Live Photo，会把 image/video 相关内容清空，因此注意不要直接通过 livePhotoView.livePhoto 来设置
-
     private var livePhotoStorge: Any?
     @available(iOS 9.1, *)
     public weak var livePhoto: PHLivePhoto? {

        return convert(imageView?.frame ?? .zero, from: imageView?.superview)
    }

    private var currentContentView: UIView? {
        //        if (_imageView) {
        //            return _imageView;
        //        }
        //        if (_livePhotoView) {
        //            return _livePhotoView;
        //        }
        //        if (self.videoPlayerView) {
        //            return self.videoPlayerView;
        //        }
        return nil
    }
}

class QMUIZoomImageViewVideoToolbar: UIView {
    // 可通过调整此属性来调整 toolbar 的视觉位置，默认为 {25, 25, 25, 18}
    // 如果同时实现了 QMUIZoomImageViewDelegate 的 contentInsetsForVideoToolbar:inZoomingImageView: 方法，则此处设置的值会覆盖掉 delegate 中返回的值
    public var contentInsets = UIEdgeInsets(top: 25, left: 25, bottom: 25, right: 18)
}

//

import Photos
import PhotosUI

protocol QMUIZoomImageViewDelegate: class {
    func singleTouch(in zoomingImageView: QMUIZoomImageView, location: CGPoint)
