如何以编程方式设置控制图像视图宽度的滑块

问题描述 投票:0回答:1

以下代码是用所有代码编写的,没有故事板。我想使用滑块移动来更改imageView图片的宽度。我在下面尝试过的方法不起作用。当滑块移动时,我希望图片的宽度随之移动。

import UIKit

class ViewController: UIViewController {

    var pic = UIImageView()
    var move = UISlider()

    var oldCons = [NSLayoutConstraint]()
    var box = 20
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        pic.backgroundColor = UIColor.systemYellow

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

        oldCons = [
               pic.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
               pic.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),
               pic.widthAnchor.constraint(equalToConstant: CGFloat(box)),
               pic.heightAnchor.constraint(equalToConstant: 450)
            ]
           NSLayoutConstraint.activate(oldCons)

           NSLayoutConstraint.activate ([
               move.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :37.5),
               move.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
               move.widthAnchor.constraint(equalToConstant: 200),
               move.heightAnchor.constraint(equalToConstant: 50),

           ])
           move.addTarget(self, action: #selector(moveRight), for: .touchUpInside)
    }

    @objc func moveRight() {
        NSLayoutConstraint.deactivate(oldCons)
        NSLayoutConstraint.activate ([
            pic.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
            pic.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50),
            pic.widthAnchor.constraint(equalToConstant: CGFloat(box)),
            pic.heightAnchor.constraint(equalToConstant: 450)
        ])

        box = Int(CGFloat(20 + move.value*90))
        print(box)
    }
}
swift slider nslayoutconstraint func viewdidappear
1个回答
0
投票

代替激活/停用约束集,添加picWidthConstraint作为类级属性:

    // we'll use this to dynamically change the pic width
    var picWidthConstraint: NSLayoutConstraint!

然后,当您想更改pic的宽度时,请更改该约束的.constant

    box = Int(CGFloat(20 + move.value*90))
    print(box)
    picWidthConstraint.constant = CGFloat(box)

这是您的原始课程,带有修改(请参见评论):

import UIKit

class ViewController: UIViewController {

    var pic = UIImageView()
    var move = UISlider()

    // don't need this anymore
    //var oldCons = [NSLayoutConstraint]()

    var box = 20

    // we'll use this to dynamically change the pic width
    var picWidthConstraint: NSLayoutConstraint!

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        pic.backgroundColor = UIColor.systemYellow

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

        // create pic.widthAnchor property (var)
        picWidthConstraint = pic.widthAnchor.constraint(equalToConstant: CGFloat(box))

        NSLayoutConstraint.activate ([
            pic.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
            pic.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),

            // activate the pic width constraint
            picWidthConstraint,

            // don't create another one
            //pic.widthAnchor.constraint(equalToConstant: CGFloat(box)),

            pic.heightAnchor.constraint(equalToConstant: 450),

            // constraints for the slider
            move.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :37.5),
            move.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
            move.widthAnchor.constraint(equalToConstant: 200),
            move.heightAnchor.constraint(equalToConstant: 50),

        ])

        // use .valueChanged to change the pic width *while* dragging the slider thumb
//      move.addTarget(self, action: #selector(moveRight), for: .touchUpInside)
        move.addTarget(self, action: #selector(moveRight), for: .valueChanged)

    }

    @objc func moveRight() {

        box = Int(CGFloat(20 + move.value*90))
        print(box)
        picWidthConstraint.constant = CGFloat(box)

    }

}
© www.soinside.com 2019 - 2024. All rights reserved.