如何在UIScrollView中实现图片缩放?

3

我的ScrollView运行顺畅。我有一些图片存储在资源库中,它们的名称从1开始到39结束。我想要对这些图片进行缩放。我尝试了不同的方法,但都没有成功。

以下是我的代码:

import UIKit

class fotolarView: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var mainScroolView: UIScrollView!

    var imageArray = [UIImage]()

    override func viewDidLoad() {
        super.viewDidLoad()

        mainScroolView.delegate = self
        mainScroolView.frame = view.frame

        imageArray = [#imageLiteral(resourceName: "1"), #imageLiteral(resourceName: "2"), #imageLiteral(resourceName: "3"), #imageLiteral(resourceName: "4"), #imageLiteral(resourceName: "5"), #imageLiteral(resourceName: "6"), #imageLiteral(resourceName: "7"), #imageLiteral(resourceName: "10"), #imageLiteral(resourceName: "8"), #imageLiteral(resourceName: "9"), #imageLiteral(resourceName: "11"), #imageLiteral(resourceName: "12"), #imageLiteral(resourceName: "20"), #imageLiteral(resourceName: "13"), #imageLiteral(resourceName: "21"), #imageLiteral(resourceName: "22"), #imageLiteral(resourceName: "15"), #imageLiteral(resourceName: "23"), #imageLiteral(resourceName: "16"), #imageLiteral(resourceName: "31"), #imageLiteral(resourceName: "24"), #imageLiteral(resourceName: "17"), #imageLiteral(resourceName: "25") , #imageLiteral(resourceName: "32"), #imageLiteral(resourceName: "33"), #imageLiteral(resourceName: "19"), #imageLiteral(resourceName: "26"), #imageLiteral(resourceName: "34"), #imageLiteral(resourceName: "27"), #imageLiteral(resourceName: "35"), #imageLiteral(resourceName: "28"), #imageLiteral(resourceName: "29"), #imageLiteral(resourceName: "36"), #imageLiteral(resourceName: "37"), #imageLiteral(resourceName: "38"), #imageLiteral(resourceName: "39")]

        for i in 0..<imageArray.count {
            let imageView = UIImageView()
            imageView.image = imageArray[i]
            imageView.isUserInteractionEnabled = true
            imageView.contentMode = .scaleAspectFit
            let xPozition = self.view.frame.width * CGFloat(i)
            imageView.frame = CGRect(x: xPozition, y: 0, width: self.mainScroolView.frame.width, height: self.mainScroolView.frame.height)
            mainScroolView.contentSize.width = mainScroolView.frame.width * CGFloat(i + 1)
            mainScroolView.addSubview(imageView)
        }
    }
}
2个回答

10
var scrollView: UIScrollView!
var imageView: UIImageView!

override func viewDidLoad()
{
    super.viewDidLoad()
    imageView = UIImageView(image: UIImage(named: "image.png"))
    scrollView = UIScrollView(frame: view.bounds)
    scrollView.backgroundColor = UIColor.black
    scrollView.contentSize = imageView.bounds.size
    scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    scrollView.contentOffset = CGPoint(x: 1000, y: 450)

    scrollView.addSubview(imageView)
    view.addSubview(scrollView)

    scrollView.delegate = self

    setZoomScale()

    setupGestureRecognizer()
}

func viewForZooming(in scrollView: UIScrollView) -> UIView?
{
    return imageView
}

override func viewWillLayoutSubviews()
{
    setZoomScale()
}

func scrollViewDidZoom(_ scrollView: UIScrollView)
{
    let imageViewSize = imageView.frame.size
    let scrollViewSize = scrollView.bounds.size

    let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
    let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0

    scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
}

func setZoomScale()
{
    let imageViewSize = imageView.bounds.size
    let scrollViewSize = scrollView.bounds.size
    let widthScale = scrollViewSize.width / imageViewSize.width
    let heightScale = scrollViewSize.height / imageViewSize.height

    scrollView.minimumZoomScale = min(widthScale, heightScale)
    scrollView.zoomScale = 1.0
}

func setupGestureRecognizer()
{
    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(ScrollViewController.handleDoubleTap(_:)))
    doubleTap.numberOfTapsRequired = 2
    scrollView.addGestureRecognizer(doubleTap)
}

func handleDoubleTap(_ recognizer: UITapGestureRecognizer)
{
    if (scrollView.zoomScale > scrollView.minimumZoomScale)
    {
        scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true)
    } else {
        scrollView.setZoomScale(scrollView.maximumZoomScale, animated: true)
    }
}

谢谢回答。但是我不明白如何使用我的图片。我在资产文件夹中有很多图片。 - Doğan kaya
我正在使用相同的代码,请检查一下。我的问题与缩放有关。 - Doğan kaya

0

只需替换以上代码中的以下函数,即可获得更高质量的结果。

  override func viewWillLayoutSubviews()
{
    setZoomScale()
    scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true)
}


 func setZoomScale()
{
    let imageViewSize = imageView.bounds.size
    let scrollViewSize = scrollView.bounds.size
    let widthScale = scrollViewSize.width / imageViewSize.width
    let heightScale = scrollViewSize.height / imageViewSize.height

    scrollView.minimumZoomScale = min(widthScale, heightScale)
    scrollView.maximumZoomScale = 6.0
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接