无法在 UIScrollView 中缩放 UIImageView

Unable to zoom UIImageView in UIScrollView

我想在 ScrollView 中放大 UIImageView,但我不知道该怎么做。

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    var scrollView: UIScrollView = UIScrollView()
    var viewInScrollView: UIView = UIView()
    var selectedImageView: UIImageView = UIImageView()


    override func viewDidLoad() {
        super.viewDidLoad()

        scrollView.delegate = self

        view.addSubview(scrollView)
        scrollView.addSubview(viewInScrollView)
        viewInScrollView.addSubview(selectedImageView)
        selectedImageView.image = UIImage(named: "michael")

        scrollView.translatesAutoresizingMaskIntoConstraints = false
        viewInScrollView.translatesAutoresizingMaskIntoConstraints = false
        selectedImageView.translatesAutoresizingMaskIntoConstraints = false

        scrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
        viewInScrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
        viewInScrollView.widthAnchor.constraint(equalToConstant: view.frame.width).isActive = true
        viewInScrollView.heightAnchor.constraint(equalToConstant: view.frame.height).isActive = true

        selectedImageView.anchor(top: viewInScrollView.topAnchor, leading: viewInScrollView.leadingAnchor, bottom: viewInScrollView.bottomAnchor, trailing: viewInScrollView.trailingAnchor)

    }

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

}

我建议从 a tutorial example 开始 UIScrollView 缩放。先一步步来。

还有....

乍一看,您对 viewInScrollView 的限制并不准确。您项目中的视图层次结构是

view -> scrollView -> viewInScrollView -> selectedImageView

viewInScrollView 的约束将决定 UIScrollViewcontentSize。当缩小 in/zooming 时,contentSize 会发生变化。因此,它的(顶部、底部、左侧、右侧)锚点应与 UIScrollView 对齐,而不是 view。所以我认为下面的约束是错误的。

// Not right
viewInScrollView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)

// It should aligned to `UIScrollView`'s top, bottom, left and right anchors.

您必须将 maximumZoomScaleminimumZoomScale 添加到您的 scrollView 中,如下所示。

scrollView.minimumZoomScale = 0.25
scrollView.maximumZoomScale = 5.0

希望对您有所帮助!