美文网首页
iOS 图片放大缩小,选择裁剪区域

iOS 图片放大缩小,选择裁剪区域

作者: 达摩君 | 来源:发表于2018-09-05 20:15 被阅读158次
    1.gif

    Demo地址

    核心代码

    就一个scrollView文件,可以直接拖到项目中使用~
    //
    //  EditImageCropView.swift
    //  EditImageDemo
    //
    //  Created by Lee on 2018/9/5.
    //  Copyright © 2018年 Lee. All rights reserved.
    //
    
    import UIKit
    
    class EditImageCropView: UIScrollView {
    
        var imageView = UIImageView()
        var imageSize: CGSize?
        var image: UIImage! = nil {
            didSet {
                if image != nil {
                    if !imageView.isDescendant(of: self) {
                        imageView.alpha = 1.0
                        addSubview(imageView)
                    }
                } else {
                    imageView.image = nil
                    return
                }
                let imageSize = self.imageSize ?? image.size
                /// 宽比例
                let ratioW = frame.width / imageSize.width
                /// 高比例
                let ratioH = frame.height / imageSize.height
                if ratioH > ratioW {
                    imageView.frame = CGRect(origin: .zero, size: CGSize(width: imageSize.width * ratioH, height: frame.height))
                } else {
                    imageView.frame = CGRect(origin: .zero, size: CGSize(width: frame.width, height: imageSize.height * ratioW))
                }
                
                contentOffset = CGPoint(x: imageView.center.x - center.x, y: imageView.center.y - center.y)
                imageView.image = image
                zoomScale = 1.0
                
            }
        }
        
        override init(frame: CGRect) {
            super.init(frame: frame)
            setupUI()
        }
        
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            setupUI()
        }
        func setupUI() {
            backgroundColor = UIColor.black
            frame.size = .zero
            clipsToBounds = true
            imageView.alpha = 0
            imageView.frame = .zero
            maximumZoomScale = 2.0
            minimumZoomScale = 0.8
            showsVerticalScrollIndicator = false
            showsHorizontalScrollIndicator = false
            bounces = true
            bouncesZoom = true
            scrollsToTop = false
            delegate = self
            setNeedsLayout()
        }
    }
    
    extension EditImageCropView: UIScrollViewDelegate {
        func viewForZooming(in scrollView: UIScrollView) -> UIView? {
            return imageView
        }
        
        func scrollViewDidZoom(_ scrollView: UIScrollView) {
            let boundsSize = scrollView.bounds.size
            var contentsFrame = imageView.frame
            if contentsFrame.size.width < boundsSize.width {
                contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
            } else {
                contentsFrame.origin.x = 0.0
            }
            if contentsFrame.size.height < boundsSize.height {
                contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2
            } else {
                contentsFrame.origin.y = 0.0
            }
            imageView.frame = contentsFrame
        }
        
        func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
            contentSize = CGSize(width: imageView.frame.width > frame.width ? imageView.frame.width + 1.0 : frame.width + 1.0, height: imageView.frame.height > frame.height ? imageView.frame.height + 1.0 : frame.height + 1.0)
        }
    }
    
    

    相关文章

      网友评论

          本文标题:iOS 图片放大缩小,选择裁剪区域

          本文链接:https://www.haomeiwen.com/subject/jsszwftx.html