【问题标题】:how to pinch zoom in on code created scrollview如何捏放大代码创建的滚动视图
【发布时间】:2019-06-08 10:05:42
【问题描述】:

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

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
    }
}

【问题讨论】:

    标签: swift zooming pinchzoom


    【解决方案1】:

    您将 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 - 内容的大小。

    【讨论】:

    • 我需要把这个放到一个特定的函数中吗?
    • 就在你实例化scrollView的时候。例如,在您的 viewForZooming 函数中,或在 viewDidLoad 中。另外,确保你的 scrollView 是constrained properly
    猜你喜欢
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 2020-08-26
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多