Как увеличивать и уменьшать масштаб в UIScrollView с помощью UISlider?

Mainscroll - это вид прокрутки, который был добавлен в другой внутренний UIView, и у меня есть UISlider для изменения масштаба внутреннего вида.

Но MainScroll.setZoomScale(CGFloat(sender.value), animated: true) эта строка не работает.

==> Вот мой код.

override func viewDidLoad() {
    super.viewDidLoad()



    MainScroll.maximumZoomScale = 1
    MainScroll.minimumZoomScale = 10

    MainScroll.delegate = self

    MainScroll.zoomScale = 5
}

@IBAction func Scrolling(_ sender: UISlider) {

    MainScroll.setZoomScale(CGFloat(sender.value), animated: true)
}

person Digvijay Gida    schedule 03.12.2018    source источник


Ответы (1)


Вот минимальный пример получения UIScrollView для масштабирования.

Ключ в том, что вы должны реализовать func viewForZooming(in scrollView: UIScrollView) -> UIView? и вернуть представление (находящееся внутри вашего scrollView), которое должно быть масштабировано (подумайте об этом как о вашем «документе» или «холсте»).

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

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    // Assume that outlets exist on a storyboard
    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var canvas: UIView! // A view that is added in the scrollView
    @IBOutlet var slider: UISlider!

    let minScale: CGFloat     = 1
    let maxScale: CGFloat     = 10
    let initialScale: CGFloat = 1

    override func viewDidLoad() {
        super.viewDidLoad()

        scrollView.delegate         = self

        scrollView.minimumZoomScale = minScale
        scrollView.maximumZoomScale = maxScale
        scrollView.zoomScale        = initialScale

        slider.minimumValue         = Float(minScale)
        slider.maximumValue         = Float(maxScale)
        slider.value                = Float(initialScale)
    }

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

    @IBAction func sliderValueChanged(_ sender: UISlider) {
        scrollView.zoomScale = CGFloat(sender.value)
    }

}
person Alladinian    schedule 03.12.2018
comment
до сих пор не работает. Можете ли вы объяснить ограничения раскадровки, которые вы применяете? @Аладдиниан - person Digvijay Gida; 03.12.2018
comment
@DigvijayGida Я тщательно проверил это, и на моей стороне все работает нормально. Раскадровка также имеет минимальную настройку, просто scrollView с подвидом (в моем примере это canvas). Вы внедрили viewForZooming? - person Alladinian; 03.12.2018
comment
Извините за работу. Большое спасибо за помощь. Можете ли вы помочь мне еще один? Здесь масштабируйте центр наблюдения @Alladinian - person Digvijay Gida; 03.12.2018
comment
@DigvijayGida Я рад, что помог тебе. Если у вас есть какие-либо другие проблемы, рассмотрите возможность открытия нового вопроса с вашим текущим кодом. Спасибо - person Alladinian; 03.12.2018
comment
Если можно пожалуйста ответьте. Просто мне нужно увеличить масштаб в центре. Я не могу задавать больше вопросов за раз, потому что здесь есть ограничение на количество вопросов в день. @Аладдиниан - person Digvijay Gida; 03.12.2018
comment
Вы можете поискать похожие вопросы. Вот один из них - person Alladinian; 03.12.2018
comment
Спасибо, бро, теперь я могу сделать это задание. - person Digvijay Gida; 03.12.2018