如何捏放大创建的滚动视图的代码

时间:2019-06-08 00:39:18

标签: swift zoom pinchzoom

我的代码创建了一个滚动视图和图像视图,该视图显示了先前视图控制器中的图片阵列。但是,我正在尝试实现代码以使用户可以放大图片。但是,无论我做什么,都行不通。关于我做错了什么或在哪里实现放大代码的任何建议?谢谢!

import UIKit

class DestinationVC: UIViewController {
    @IBOutlet weak var myScrollView: UIScrollView!

    var mySelectedProtocol:Protocol?
    var pageControl:UIPageControl?
    var currentPageIndex:Int=0
    fileprivate var count:Int=0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        if mySelectedProtocol == nil { self.navigationController?.popViewController(animated: true) }
        if mySelectedProtocol!.imagesName!.count == 0 { self.navigationController?.popViewController(animated: true) }
        /// We have Data
        print("Img Array with Name ==> \(mySelectedProtocol?.imagesName ?? [])")
        DispatchQueue.main.async {
            self.addPageView()
        }
    }
    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        myScrollView.delegate = self
        myScrollView.minimumZoomScale = 1.0
        myScrollView.maximumZoomScale = 5.0
        return myScrollView
            }

    private func addPageView() {
        myScrollView.backgroundColor=UIColor.black
        myScrollView.isUserInteractionEnabled=true
        myScrollView.showsHorizontalScrollIndicator=true
        myScrollView.isPagingEnabled=true
        myScrollView.delegate=self
        myScrollView.bounces=false

        self.count=mySelectedProtocol!.imagesName!.count
        for i in 0..<self.count {
            ///Get Origin
            let xOrigin : CGFloat = CGFloat(i) * myScrollView.frame.size.width
            ///Create a imageView
            let imageView = UIImageView()
            imageView.frame = CGRect(x: xOrigin, y: 0, width: myScrollView.frame.size.width, height: myScrollView.frame.size.height)
            imageView.contentMode = .scaleAspectFit
            imageView.image=UIImage(named: mySelectedProtocol!.imagesName![i])
            myScrollView.addSubview(imageView)

        }
        setUpPageControl()
        ///Set Content Size to Show
        myScrollView.contentSize = CGSize(width: myScrollView.frame.size.width * CGFloat(self.count), height: myScrollView.frame.size.height)
    }

    private func setUpPageControl() {
        if pageControl == nil { pageControl=UIPageControl() }
        pageControl!.numberOfPages = self.count
        pageControl!.currentPageIndicatorTintColor = UIColor.red
        pageControl!.pageIndicatorTintColor = UIColor.white
        pageControl!.frame = CGRect(x: 0, y: 20, width: self.view.frame.width, height: self.view.frame.height*0.2)
        pageControl!.currentPage=currentPageIndex
        self.view.addSubview(pageControl!)
        self.view.bringSubview(toFront: pageControl!)
    }
}

extension DestinationVC: UIScrollViewDelegate {
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        let scrollW : CGFloat = scrollView.frame.size.width
        currentPageIndex = Int(scrollView.contentOffset.x / scrollW)
        self.pageControl!.currentPage=currentPageIndex
    }

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let scrollW : CGFloat = scrollView.frame.size.width
        currentPageIndex = Int(scrollView.contentOffset.x / scrollW)
        self.pageControl!.currentPage=currentPageIndex
    }
}

1 个答案:

答案 0 :(得分:0)

您将minimumScale设置为1.0-这只是正常比例的1倍。如果希望将其缩小得更近,可以尝试设置最小缩放,如下所示:

let scaleWidth = scrollView.frame.size.width / scrollView.contentSize.width
let scaleHeight = scrollView.frame.size.height / scrollView.contentSize.height
let minScale = min(scaleWidth, scaleHeight)

scrollView.minimumZoomScale = minScale
scrollView.maximumZoomScale = 1.0
scrollView.zoomScale = minScale

然后将maximumZoomScale设置为1.0-内容的大小。