Как правильно увеличить изображение с помощью прокрутки, не перемещая изображение в случайную сторону

#ios #swift #xcode #uiscrollview #uiimageview

#iOS #swift #xcode #uiscrollview #uiimageview

Вопрос:

Мне удалось увеличить масштаб до a UIImageView в a UIScrollView , но изображение уходит в сторону или снизу, так что я не могу прокручивать все изображение в увеличенном режиме.

Пробовал поиграть с constraints , похоже, никакого эффекта.

 import Foundation
import UIKit

class PhotoZoomController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var scroller: UIScrollView!
    @IBOutlet weak var back: UIButton!

    weak var image: UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()
        assert(imageView != nil)
        if let iv = imageView {
            iv.image = image
        }
        scroller.delegate = self
    }


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

    @IBAction func exit(_ sender: Any) {
        dismiss(animated: true)
    }


}
  

Ответ №1:

Не могли бы вы попробовать добавить ZoomScale .

 scrollView.minimumZoomScale = 1.0 // Minimum zoom scale
scrollView.maximumZoomScale = 10.0 // Maximum zoom scale
scrollView.zoomScale = 1.0 //Default zoom scale
  

Надеюсь, этот код работает для вас.

Комментарии:

1. это не исправляет проблему.

2. Когда я увеличиваю масштаб, нижняя часть изображения не может быть прокручена в поле зрения.

Ответ №2:

Я понял это, сначала привязал imageview в storyboard к 4 краям scrollview с интервалом 0, затем добавил ограничение для горизонтального / вертикального среднего позиционирования.

После этого включите:

 self.imageView?.clipsToBounds = true
scroller.contentSize = imageView?.image?.size ?? scroller.contentSize
  

вот весь файл:

 //
//  PhotoZoomController.swift
//
//
//  Created by John Karasev on 4/04/19.
//  Copyright © 2019 John Karasev. All rights reserved.
//

import Foundation
import UIKit

class PhotoZoomController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var scroller: UIScrollView!
    @IBOutlet weak var back: UIButton!
    @IBOutlet weak var imageView: UIImageView!

    weak var image: UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()

        assert(imageView != nil)
        if let iv = imageView {
            iv.image = image
        }
        scroller.delegate = self
        scroller.zoomScale = 1.0
        scroller.addSubview(imageView!)
        self.imageView?.clipsToBounds = true
        scroller.contentSize = imageView?.image?.size ?? scroller.contentSize
    }


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

    @IBAction func exit(_ sender: Any) {
        dismiss(animated: true)
    }


}