123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- //
- // ImagePickerPreviewCell.swift
- // MTImagePicker
- //
- // Created by Luo on 5/24/16.
- // Copyright © 2016 Luo. All rights reserved.
- //
- import UIKit
- class ImagePickerPreviewCell: UICollectionViewCell, UIScrollViewDelegate {
- @IBOutlet weak var scrollview: UIScrollView!
- var imageView: UIImageView! = UIImageView()
- weak var controller: MTImagePickerPreviewController?
- fileprivate var model: MTImagePickerModel!
- override func awakeFromNib() {
- scrollview.zoomScale = 1
- scrollview.minimumZoomScale = 1
- scrollview.maximumZoomScale = 3
- scrollview.contentSize = CGSize.zero
- scrollview.delegate = self
- imageView.isUserInteractionEnabled = true
- self.scrollview.addSubview(imageView)
- scrollview.delegate = self
- // 支持单击全屏,双击放大
- let singTapGesture = UITapGestureRecognizer(target: self, action: #selector(ImagePickerPreviewCell.onImageSingleTap(_:)))
- singTapGesture.numberOfTapsRequired = 1
- singTapGesture.numberOfTouchesRequired = 1
- let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(ImagePickerPreviewCell.onImageDoubleTap(_:)))
- doubleTapGesture.numberOfTapsRequired = 2
- doubleTapGesture.numberOfTouchesRequired = 1
- singTapGesture.require(toFail: doubleTapGesture)
- self.addGestureRecognizer(singTapGesture)
- self.addGestureRecognizer(doubleTapGesture)
- }
- override func prepareForReuse() {
- scrollview.zoomScale = 1.0
- scrollview.contentSize = CGSize.zero
- imageView.image = nil
- }
- override func layoutSubviews() {
- super.layoutSubviews()
- scrollview.zoomScale = 1.0
- scrollview.contentSize = CGSize.zero
- if let _image = imageView.image {
- let bounds = UIScreen.main.compatibleBounds
- let boundsDept = bounds.width / bounds.height
- let imgDept = _image.size.width / _image.size.height
- // 图片长宽和屏幕的宽高进行比较 设定基准边
- if imgDept > boundsDept {
- imageView.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.width / imgDept)
- } else {
- imageView.frame = CGRect(x: 0, y: 0, width: bounds.height * imgDept, height: bounds.height)
- }
- self.scrollview.layoutIfNeeded()
- self.scrollview.frame.origin = CGPoint.zero
- imageView.center = scrollview.center
- }
- }
- func initWithModel(_ model: MTImagePickerModel, controller: MTImagePickerPreviewController) {
- self.model = model
- self.controller = controller
- self.imageView.image = model.getPreviewImage()
- self.layoutSubviews()
- }
- @objc func onImageSingleTap(_ sender: UITapGestureRecognizer) {
- if let controller = self.controller {
- controller.topView.isHidden = !controller.topView.isHidden
- controller.bottomView.isHidden = !controller.bottomView.isHidden
- }
- }
- func didEndScroll() {
- self.model.getImageAsync {
- image in
- self.imageView.image = image
- }
- }
- @objc func onImageDoubleTap(_ sender: UITapGestureRecognizer) {
- let zoomScale = scrollview.zoomScale
- if zoomScale <= 1.0 {
- let loc = sender.location(in: sender.view) as CGPoint
- let wh: CGFloat = 1
- let x: CGFloat = loc.x - 0.5
- let y: CGFloat = loc.y - 0.5
- let rect = CGRect(x: x, y: y, width: wh, height: wh)
- scrollview.zoom(to: rect, animated: true)
- } else {
- scrollview.setZoomScale(1.0, animated: true)
- }
- }
- func scrollViewDidZoom(_ scrollView: UIScrollView) {
- var xcenter = scrollView.center.x
- var ycenter = scrollView.center.y
- xcenter = scrollView.contentSize.width > scrollView.frame.size.width ? scrollView.contentSize.width/2 : xcenter
- ycenter = scrollView.contentSize.height > scrollView.frame.size.height ? scrollView.contentSize.height/2 : ycenter
- imageView.center = CGPoint(x: xcenter, y: ycenter)
- }
- func viewForZooming(in scrollView: UIScrollView) -> UIView? {
- return imageView
- }
- }
|