我正在创建测验应用程序,并且无法更改在for循环中生成的特定imageview的显示图像。
以下代码负责根据特定测验中的问题数量生成图像视图。在viewDidLoad()
方法中调用它:
var imageView = UIImageView()
func addProgressImages(to view: UIView, count: Int){
let screenSize = UIScreen.main.bounds.size
for i in 0..<count {
let spacing: CGFloat = 2
let tag = i + 888
let width: CGFloat = screenSize.width/CGFloat(count)
let height: CGFloat = width
if let view = view.viewWithTag(tag){
view.removeFromSuperview()
}
let x = spacing + CGFloat(i) * width
imageView = UIImageView(frame: CGRect(x: x, y: 100, width: width - spacing, height: height))
imageView.image = UIImage(named: "question_progress_empty")
imageView.tag = tag
imageView.contentMode = .scaleAspectFit
view.addSubview(imageView)
//print("imageviews displaying")
}
}
当用户使用if语句选择该问题的答案时,我试图将某些图像更改为另一图像:
func changeImage() {
if (optA != questionAns){
imageView.image = UIImage(named: "wrong_answer")
print("opta")
}else if(optB == questionAns){
imageView.image = UIImage(named: "wrong_answer")
print("optb")
}else if(optC == questionAns){
print("optc")
imageView.image = UIImage(named: "wrong_answer")
}else{
print("if statement not initialised")
}
}
https://imgur.com/a/zwJ4EVn-这是上面代码的输出 当前,当用户单击按钮时,仅最后一张图像将被更改。
我需要修改与特定问题相关的imageview的帮助,例如如果回答了问题2,则只有imageview会改变,而其余的则保持不变。
希望这种解释是有意义的,任何输入将不胜感激, 谢谢。
答案 0 :(得分:0)
看到你做错了几件事。
您已将UIImageView
用作实例变量,如下所示,因此在
创建所有图像,其中包含对最后一个图像的引用
imageView
。
var imageView = UIImageView()
将var imageView
用作局部变量,并在func
changeImage()
中使用其标记值获取正确的imageView
,然后
尝试更改其图像。
如有任何疑问,请发表评论。
如何在imageView
的下面的代码中重新获得changeImage()
。
let tag = 888 + (questionNumber - 1)
if let imageView = view.viewWithTag(tag) as? UIImageView {
// Change imageView's image here
}
答案 1 :(得分:0)
您可能要创建一个图像视图数组:
var imageViews = [UIImageView]()
并将您的UIImagesViews添加到循环中的该数组中:
for i in 0..<count {
var imageView = UIImageView()
// additional setup...
imageViews.append(imageView)
}
然后,您以后可以遍历数组并更改图像:
for imageView in imageViews {
imageView.image = UIImage(named: "wrong_answer")
// etc.
}