为什么我不能在单击按钮时更改图像?
why cant i change image on button click?
我正在尝试在单击按钮时更改图像我正在使用 didset 这样做,当变量发生变化时图像也会发生变化,即使变量正在变化,它也不起作用,这是我的代码:
变量变化太大:
var page:Int=1 {
didSet {
DispatchQueue.main.async { [self] in
let newW = page == 1 ? 0.04*Double(Float(bounds.size.width)) : 0.12*Double(Float(bounds.size.width))
let newX=CGFloat(Float(Int(Float(Double(bounds.size.width)*0.5-newW*0.5))))
currOption = UIImageView(image:UIImage(named: options[page-1].imagePath))
currOption.frame = CGRect(x: newX, y: CGFloat(Int(Float(bounds.size.height/22))), width: CGFloat(newW), height: CGFloat(globW))
}
print("2nd Triggered", currOption)
}
}
受影响的变量:
var currOption:UIImageView! = UIImageView(image:UIImage(named: "art.scnassets/A.png"))
其中资产字符串 i:
var options:[AButtons]=[
AButtons(imagePath: "art.scnassets/A.png", name: "A"),
AButtons(imagePath: "art.scnassets/B.png", name: "B"),
AButtons(imagePath: "art.scnassets/C.png", name: "C"),
AButtons(imagePath: "art.scnassets/D.png", name: "D"),
AButtons(imagePath: "art.scnassets/E.png", name: "E"),
]
触发页面变化的函数:
@objc func optionClicked(sender: UIButton){
page = sender.tag + 1
print("1st Trigger",page, sender.tag)
}
所有选项对象都有一个标签
谢谢大家抽空
在某些时候(尽管您没有在示例中显示),currOption
被添加到视图层次结构中。通过替换变量的值(即 currOption = ...
),尽管您替换了存储在 currOption
中的内容,但您并没有替换存储在视图层次结构本身中的内容。
尝试将您的 currOption = ...
行替换为:
currOption.image = UIImage(named: options[page-1].imagePath)
当然,这是假设其他一切正常。
我正在尝试在单击按钮时更改图像我正在使用 didset 这样做,当变量发生变化时图像也会发生变化,即使变量正在变化,它也不起作用,这是我的代码:
变量变化太大:
var page:Int=1 {
didSet {
DispatchQueue.main.async { [self] in
let newW = page == 1 ? 0.04*Double(Float(bounds.size.width)) : 0.12*Double(Float(bounds.size.width))
let newX=CGFloat(Float(Int(Float(Double(bounds.size.width)*0.5-newW*0.5))))
currOption = UIImageView(image:UIImage(named: options[page-1].imagePath))
currOption.frame = CGRect(x: newX, y: CGFloat(Int(Float(bounds.size.height/22))), width: CGFloat(newW), height: CGFloat(globW))
}
print("2nd Triggered", currOption)
}
}
受影响的变量:
var currOption:UIImageView! = UIImageView(image:UIImage(named: "art.scnassets/A.png"))
其中资产字符串 i:
var options:[AButtons]=[
AButtons(imagePath: "art.scnassets/A.png", name: "A"),
AButtons(imagePath: "art.scnassets/B.png", name: "B"),
AButtons(imagePath: "art.scnassets/C.png", name: "C"),
AButtons(imagePath: "art.scnassets/D.png", name: "D"),
AButtons(imagePath: "art.scnassets/E.png", name: "E"),
]
触发页面变化的函数:
@objc func optionClicked(sender: UIButton){
page = sender.tag + 1
print("1st Trigger",page, sender.tag)
}
所有选项对象都有一个标签 谢谢大家抽空
在某些时候(尽管您没有在示例中显示),currOption
被添加到视图层次结构中。通过替换变量的值(即 currOption = ...
),尽管您替换了存储在 currOption
中的内容,但您并没有替换存储在视图层次结构本身中的内容。
尝试将您的 currOption = ...
行替换为:
currOption.image = UIImage(named: options[page-1].imagePath)
当然,这是假设其他一切正常。