滑块上的 .tag 不改变 imagview 的 alpha

.tag on slider not changing the alpha of imagview

我的 swift 下面的代码有 2 个不同的按钮,它们应该影响基于它们初始化的 .tagnumber 的滑块。 B1 应该影响 alhpa 或 imageivew 的透明度,而 b2 应该减小/增加尺寸。 b2 做什么工作。 B1 没有什么 work.My 代码不使用任何故事板。此外,uislider 应该只执行一项任务,它不能同时调整 imageview 的大小和更改 alpha。只有 1 个任务。

 import UIKit

class ViewController: UIViewController {

var pzc = UIImageView()
var s = UISlider()
var b1 = UIButton()
var b2 = UIButton()
var jessicaAlba:Float = 50
var topConstraint: NSLayoutConstraint!
var heightConstraint: NSLayoutConstraint!
var leadingConstraint: NSLayoutConstraint!
var trailingConstraint: NSLayoutConstraint!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    [pzc,s,b1,b2].forEach {
        [=10=].translatesAutoresizingMaskIntoConstraints = false
        view.addSubview([=10=])
    }

    [b1,b2].forEach {
        [=10=].backgroundColor = .systemRed
    }

    pzc.backgroundColor = .systemGray


    b1.frame = CGRect(x: view.center.x-115, y: view.center.y+200, width: 30, height: 30)
    b2.frame = CGRect(x: view.center.x-115, y: view.center.y+250, width: 30, height: 30)

    s.addTarget(self, action: #selector(moveRight), for: .touchUpInside)
    b1.addTarget(self, action: #selector(mr1), for: .touchUpInside)
    b2.addTarget(self, action: #selector(mr2), for: .touchUpInside)

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

        b2.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :130),
        b2.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
        b2.widthAnchor.constraint(equalToConstant: 75),
        b2.heightAnchor.constraint(equalToConstant: 50),
    ])

    s.minimumValue = 50
    s.maximumValue = 200
    s.setValue(jessicaAlba, animated: false)

    view.addSubview(s)

    s.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true
    s.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10).isActive = true
    s.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -10).isActive = true

    pzc.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(pzc)

    topConstraint = pzc.topAnchor.constraint(equalTo: view.topAnchor, constant: CGFloat(jessicaAlba))
    topConstraint.isActive = true
    heightConstraint = pzc.heightAnchor.constraint(equalTo: view.heightAnchor , multiplier: 0.5, constant: CGFloat(-jessicaAlba))
    heightConstraint.isActive = true

    leadingConstraint = pzc.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: CGFloat(jessicaAlba))
    leadingConstraint.isActive = true
    trailingConstraint = pzc.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: CGFloat(-jessicaAlba))
    trailingConstraint.isActive = true


}



    @objc func moveRight() {
        if s.tag == 1 {
            pzc.alpha = CGFloat(s.value)
        }
        if s.tag == 2 {
            changeSize()
        }
    }
@objc func changeSize() {
    UIView.animate(withDuration: 0.5, animations: {
        self.jessicaAlba = self.s.value
        self.topConstraint.constant = CGFloat(self.jessicaAlba)
        self.heightConstraint.constant = CGFloat(-self.jessicaAlba)
        self.leadingConstraint.constant = CGFloat(self.jessicaAlba)
        self.trailingConstraint.constant = CGFloat(-self.jessicaAlba)
        self.view.layoutIfNeeded()
    }) { (finished) in
    }
}



@objc func mr1() {
    b1.backgroundColor = .brown
    b2.backgroundColor = .systemPink


    s.tag = 1
}
@objc func mr2() {

      b2.backgroundColor = .brown
      b1.backgroundColor = .systemPink
      s.tag = 2
}
}

此处在您的 UISlider 上添加了多个目标。只需修改您的功能。

@objc func moveRight() {
    if s.tag == 1 {
        let diff = s.maximumValue-s.minimumValue
        pzc.alpha = CGFloat(s.value/diff)
    }
    if s.tag == 2 {
        changeSize()
    }
}

您还可以修改动画的 changeSize() 函数。

@objc func changeSize() {
    UIView.animate(withDuration: 0.5, animations: {
        self.jessicaAlba = self.s.value
        self.topConstraint.constant = CGFloat(self.jessicaAlba)
        self.heightConstraint.constant = CGFloat(-self.jessicaAlba)
        self.leadingConstraint.constant = CGFloat(self.jessicaAlba)
        self.trailingConstraint.constant = CGFloat(-self.jessicaAlba)
        self.view.layoutIfNeeded()
    }) { (finished) in
    }
}