используйте ползунок, чтобы изменить ширину и высоту ограничения изображения NSLAYOUT - PullRequest
0 голосов
/ 02 мая 2020

Цель кода моего swift - использовать ползунок, чтобы увеличить, уменьшить размер изображения. Imageview pi c должен иметь возможность увеличивать уменьшенный размер в зависимости от значения слайдера. Когда вызывается веселье c, необходимо отключить исходные ограничения, чтобы можно было изменять ширину и высоту. Я слышал, что можно использовать анимационные блоки.

import UIKit

class ViewController: UIViewController {

    var pic = UIImageView()
    var slide = UISlider()
    var currentView: UIView?
    var oldCons = [NSLayoutConstraint]()

    override func viewDidLoad() {
        super.viewDidLoad()
        slide.backgroundColor = .systemPink

        pic.backgroundColor = .systemGreen


        [pic,slide].forEach {
            $0.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview($0)



        }
        NSLayoutConstraint.activate([

            slide.heightAnchor.constraint(equalTo:  view.heightAnchor ,multiplier:  0.25),
            slide.widthAnchor.constraint(equalTo:  view.widthAnchor ,multiplier:  0.25),
            slide.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),

            slide.topAnchor.constraint(equalTo: pic.bottomAnchor, constant :0),

        ])
        oldCons = [

            pic.topAnchor.constraint(equalTo: view.topAnchor, constant :0),
            pic.heightAnchor.constraint(equalTo:  view.heightAnchor ,multiplier:  0.25),
            pic.widthAnchor.constraint(equalTo:  view.widthAnchor ,multiplier:  0.25),
            pic.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),



        ]
        NSLayoutConstraint.activate(oldCons)



        slide.addTarget(self, action: #selector(change), for: .allTouchEvents)

    }


    @objc func change(){
        NSLayoutConstraint.deactivate(oldCons)
        pic.bounds.size.width = CGFloat(slide.value)
        pic.bounds.size.height = CGFloat(slide.value)

    }


}

1 Ответ

0 голосов
/ 02 мая 2020

Вам не нужно деактивировать свои ограничения. Вам просто нужно сохранить их и обновить константы по мере скольжения слайдера.

class ViewController: UIViewController {

    var pic = UIImageView()
    var slide = UISlider()
    var currentView: UIView?

    var picWidth: NSLayoutConstraint!
    var picHeight: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()

        // ...

        picWidth = pic.widthAnchor.constraint(equalTo:  view.widthAnchor ,multiplier:  0.25)
        picHeight = pic.heightAnchor.constraint(equalTo:  view.heightAnchor ,multiplier:  0.25)
        NSLayoutConstraint.activate([
            slide.heightAnchor.constraint(equalTo:  view.heightAnchor ,multiplier:  0.25),
            slide.widthAnchor.constraint(equalTo:  view.widthAnchor ,multiplier:  0.25),
            slide.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),
            slide.topAnchor.constraint(equalTo: pic.bottomAnchor, constant :0),

            pic.topAnchor.constraint(equalTo: view.topAnchor, constant :0),
            picWidth,
            picHeight,
            pic.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant :0),
        ])

        // ...
    }

    @objc func change(){
        picWidth.constant = CGFloat(slide.value) * view.frame.size.width * 0.25
        picHeight.constant = CGFloat(slide.value) * view.frame.size.height * 0.25
    }

}
...