我们在使用APP的时候,有时会发现有些图片可以通过两指进行放大、缩小,今天就实现这样的一种效果,比较简单,不喜勿喷。。。。

var imageVi:UIImageView! = nil
    var myScrollV:UIScrollView! = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        imageVi = UIImageView.init(image: UIImage.init(named: "liwu.jpg"))
        setUpScrollView()
        myScrollV.delegate = self
        setZoomScaleFor(srollViewSize: myScrollV.bounds.size)
        myScrollV.zoomScale = myScrollV.minimumZoomScale
        recenterImage()
        
    }
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        
        setZoomScaleFor(srollViewSize: myScrollV.bounds.size)
        
        if myScrollV.zoomScale < myScrollV.minimumZoomScale {
            myScrollV.zoomScale = myScrollV.minimumZoomScale
        }
        
        recenterImage()
    }
    private func recenterImage() {
        
        let scrollViewSize = myScrollV.bounds.size
        let imageViewSize = imageVi.frame.size
        let horizontalSpace = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2.0 : 0
        let verticalSpace = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.width) / 2.0 :0
        
        myScrollV.contentInset = UIEdgeInsetsMake(verticalSpace, horizontalSpace, verticalSpace, horizontalSpace)
        
    }
    private func setZoomScaleFor(srollViewSize: CGSize) {
        
        let imageSize = imageVi.bounds.size
        let widthScale = srollViewSize.width / imageSize.width
        let heightScale = srollViewSize.height / imageSize.height
        let minimunScale = min(widthScale, heightScale)
        
        myScrollV.minimumZoomScale = minimunScale
        myScrollV.maximumZoomScale = 3.0
        
    }
    private func setUpScrollView() {
        
        myScrollV = UIScrollView(frame: view.bounds)
        myScrollV.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        myScrollV.backgroundColor = UIColor.clear
        myScrollV.contentSize = imageVi.bounds.size
        myScrollV.addSubview(imageVi)
        self.view.addSubview(myScrollV)
        
    }
    //MARK:---------UIScrollViewDelegate
    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return self.imageVi
    }
    func scrollViewDidZoom(_ scrollView: UIScrollView) {
        self.recenterImage()
    }

效果图:(源码下载:https://github.com/hbblzjy/SwiftBigAndSmallDemo)

最新文章

  1. RHEL6.5 换源
  2. 【高性能服务器】Nginx剖析
  3. 使用struts+spring+hibernate组装web应用
  4. Android学习路线(六)为Android应用加入ActionBar
  5. Servlet 基础知识
  6. salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
  7. 芝麻HTTP:Python爬虫实战之抓取淘宝MM照片
  8. 牛客挑战赛30 小G砍树 树形dp
  9. MapReduce 计数器简介
  10. linux的基本操作(正则表达式)
  11. iOS程序main函数之前发生了什么
  12. Day4作业及默写
  13. SLES 12 SP2 安装src.rpm软件包
  14. Vue的计算属性和侦听器
  15. c++ 算法 栅格中两点之间连线
  16. Vultr新推出3.5美元/月套餐,并且支持微信支付了
  17. Syntax error on token &quot;Invalid Regular Expression Options&quot;, no accurate corr
  18. Hibernate中@Embedded和@Embeddable注解
  19. Python的ipython的安装
  20. 20145231熊梓宏《网络对抗》逆向及Bof基础

热门文章

  1. 认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法
  2. PHPCMS某处设计缺陷可致authkey泄露
  3. TopCoder SRM 558 Div 1 - Problem 1000 SurroundingGame
  4. 洛谷P2050 [NOI2012]美食节
  5. [bzoj4866] [Ynoi2017]由乃的商场之旅
  6. Cookie 和 Session的基本使用
  7. Unity脚本自动添加注释脚本及排版格式
  8. 移动端手势双击(MouseDown也可以在移动端响应,但是帧率太低)
  9. 自然语言处理工具:中文 word2vec 开源项目,教程,数据集
  10. jvm(二):内存管理