Как настроить zoom для ImageView внутри ScrollView с центрированием?

На экране есть aimView, расположенный по центру. Нужно поправить ScrollView:

  1. После зума - изображение должно центрироваться по горизонтали/вертикали, если есть расстояния от imageView до краев экрана.
  2. После зума должна быть возможность скроллить ScrollView, чтобы любая часть imageView могла попасть под aimView.
  3. При открытии экрана выставлялся такой зум, чтобы изображение занимало максимально возможное пространство.

Сейчас это выглядит так:

введите сюда описание изображения

Код:

import UIKit

class ScrollViewController: UIViewController, UIScrollViewDelegate {

    var scrollView: UIScrollView!
    var imageView: UIImageView!
    var image: UIImage!
    var aimView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView = UIScrollView()
        scrollView.delegate = self
        setupScrollView()

        image = #imageLiteral(resourceName: "apple")
        imageView = UIImageView(image: image)
        setupImageView()

        aimView = UIView()
        setupAimView()
    }

    func setupScrollView() {
        scrollView.backgroundColor = .yellow
        view.addSubview(scrollView)
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: view.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        ])

        scrollView.maximumZoomScale = 10
        scrollView.minimumZoomScale = 0.1
        scrollView.zoomScale = 1.0
    }

    func setupImageView() {
        imageView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(imageView)

        NSLayoutConstraint.activate([
            imageView.widthAnchor.constraint(equalToConstant: image.size.width),
            imageView.heightAnchor.constraint(equalToConstant: image.size.height),
            imageView.topAnchor.constraint(equalTo: scrollView.topAnchor),
            imageView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
            imageView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
            imageView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor)
        ])
    }

    func setupAimView() {
        aimView.translatesAutoresizingMaskIntoConstraints = false
        aimView.backgroundColor = .green
        aimView.alpha = 0.7
        aimView.isUserInteractionEnabled = false
        view.addSubview(aimView)
        NSLayoutConstraint.activate([
            aimView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            aimView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 100),
            aimView.widthAnchor.constraint(equalTo: aimView.heightAnchor),
            aimView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    }

    // MARK: - UIScrollViewDelegate

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

Ответы (0 шт):