Swift 使用滑块控制nslayoutConstraint的宽度和高度

Swift 使用滑块控制nslayoutConstraint的宽度和高度,swift,constraints,nslayoutconstraint,uislider,Swift,Constraints,Nslayoutconstraint,Uislider,我的代码是swift,我想用一个滑块(sd)来控制imageview图片的宽度和高度。我试图在下面说明的内容不起作用。只要我移动滑块,sd和pic disaper都会消失。当滑块移动时,pic应逐渐改变其宽度和高度。我在调试区域看到了百分比变化,但在pic上不起作用。我的代码不使用故事板 import UIKit class ViewController: UIViewController { var sd = UISlider() var pic = UIImageView() var st

我的代码是swift,我想用一个滑块(sd)来控制imageview图片的宽度和高度。我试图在下面说明的内容不起作用。只要我移动滑块,sd和pic disaper都会消失。当滑块移动时,pic应逐渐改变其宽度和高度。我在调试区域看到了百分比变化,但在pic上不起作用。我的代码不使用故事板

import UIKit

class ViewController: UIViewController {
var sd = UISlider()
var pic = UIImageView()
var start = [NSLayoutConstraint]()
var change = [NSLayoutConstraint]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

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

        $0.backgroundColor = .systemOrange
    }

    start = [
        pic.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        pic.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -225),
        pic.widthAnchor.constraint(equalToConstant: 300),
        pic.heightAnchor.constraint(equalToConstant: 450),

        sd.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        sd.topAnchor.constraint(equalTo: view.centerYAnchor, constant : +250),
        sd.widthAnchor.constraint(equalToConstant: 100),
        sd.heightAnchor.constraint(equalToConstant: 40)
    ]
    NSLayoutConstraint.activate(start)

    sd.addTarget(self, action: #selector(moveRight), for: .allEvents)





}


@objc func moveRight() {

        NSLayoutConstraint.deactivate(start)

    let jessicaAlba = CGFloat(sd.value)
    print(jessicaAlba)


    NSLayoutConstraint.activate ([

        pic.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        pic.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -225),
        pic.widthAnchor.constraint(equalToConstant: jessicaAlba),
        pic.heightAnchor.constraint(equalToConstant: jessicaAlba),

        sd.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        sd.topAnchor.constraint(equalTo: view.centerYAnchor, constant : +250),
        sd.widthAnchor.constraint(equalToConstant: 100),
        sd.heightAnchor.constraint(equalToConstant: 40)

    ])
      NSLayoutConstraint.activate(change)


}


}

您的代码有两个问题

1)您已将widthAnchor和heightAnchor约束设置为CGFloat(sd.value)的常量,其范围介于0和1之间。这就是为什么你的照片不见了。但实际上,它的宽度和高度被设置为小于1的值

2)您尚未从moveRight功能停用先前设置的约束

请尝试下面的示例代码段

    @objc func moveRight() {
        NSLayoutConstraint.deactivate(start)

        let jessicaAlba = 300 + ( 300 * CGFloat(sd.value) )
        print(CGFloat(sd.value))

        start = [

            pic.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
            pic.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -225),
            pic.widthAnchor.constraint(equalToConstant: jessicaAlba),
            pic.heightAnchor.constraint(equalToConstant: jessicaAlba),

            sd.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
            sd.topAnchor.constraint(equalTo: view.centerYAnchor, constant : +250),
            sd.widthAnchor.constraint(equalToConstant: 100),
            sd.heightAnchor.constraint(equalToConstant: 40)

        ]
        NSLayoutConstraint.activate (start)
    }