单击按钮修改生成的 imageViews 的图像
Modifying images of generated imageViews on button click
我正在创建一个测验应用程序,但无法更改显示在 for 循环中生成的特定图像视图的图像。
以下代码负责根据特定测验中的问题数量生成图像视图。在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 - 这是上面代码的输出
目前,只有最后一张图片会在用户单击按钮时发生变化。
我需要帮助修改与该特定问题相关的图像视图,例如如果回答了问题2,只有那个imageview会改变,其余的保持不变。
希望这个解释有意义,任何输入都将不胜感激,
谢谢
看到你做错了几件事。
您已经将 UIImageView
作为实例变量,如下所示,所以之后
创建所有图像,它持有对最后一个的引用
imageView
.
var imageView = UIImageView()
将 var imageView
设置为局部变量,然后在 func
changeImage()
中使用其标记值获取正确的 imageView
尝试更改其图像。
如有疑问请评论。
如何在 changeImage()
中恢复 imageView
检查下面的代码。
let tag = 888 + (questionNumber - 1)
if let imageView = view.viewWithTag(tag) as? UIImageView {
// Change imageView's image here
}
您可能想要创建图像视图数组:
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.
}
我正在创建一个测验应用程序,但无法更改显示在 for 循环中生成的特定图像视图的图像。
以下代码负责根据特定测验中的问题数量生成图像视图。在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 - 这是上面代码的输出 目前,只有最后一张图片会在用户单击按钮时发生变化。
我需要帮助修改与该特定问题相关的图像视图,例如如果回答了问题2,只有那个imageview会改变,其余的保持不变。
希望这个解释有意义,任何输入都将不胜感激, 谢谢
看到你做错了几件事。
您已经将
UIImageView
作为实例变量,如下所示,所以之后 创建所有图像,它持有对最后一个的引用imageView
.var imageView = UIImageView()
将
var imageView
设置为局部变量,然后在func changeImage()
中使用其标记值获取正确的imageView
尝试更改其图像。
如有疑问请评论。
如何在 changeImage()
中恢复 imageView
检查下面的代码。
let tag = 888 + (questionNumber - 1)
if let imageView = view.viewWithTag(tag) as? UIImageView {
// Change imageView's image here
}
您可能想要创建图像视图数组:
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.
}