【问题标题】:.tag on slider not changing the alpha of imagview滑块上的 .tag 不会改变 imagview 的 alpha
【发布时间】:2019-12-09 23:09:21
【问题描述】:

我下面的 swift 代码有 2 个不同的按钮,它们应该会影响基于它们初始化的 .tagnumber 的滑块。 B1 应该影响图像的 alhpa 或透明度,而 b2 应该减小/增加大小。 b2 所做的工作。 B1 不起作用。我的代码不使用任何情节提要。此外,uislider 应该只执行一项任务,它不能同时调整图像视图的大小并更改 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 {
        $0.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview($0)
    }

    [b1,b2].forEach {
        $0.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
}
}

【问题讨论】:

    标签: swift uibutton tags slider alpha


    【解决方案1】:

    这里在您的 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
        }
    }
    

    【讨论】:

    • 编辑了我上面的代码,您的代码没有看到对 alpha 的任何影响,但动画有效。
    • s.value 大于 alpha 范围。你可以修改,让 diff = s.maximumValue-s.minimumValue pzc.alpha = CGFloat(s.value/diff)
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多