如何在运行时更改子视图 (UIImageView) 中的图像



我有一个包含 5 个 UIImageView 的 uiStackView,我需要在运行时更改此 imageView 中的图像。

现在我删除所有子视图,生成新的 UIImageViews,并像子视图一样添加它,但它对性能的不良做法。我试试:

let targetStar = Int(floorf(value * Float(uiStars.subviews.count))) - 1
let factor = CGFloat(min(1, max(self.value, 0)))
let starsCount = uiStars.subviews.count
uiStars.subviews.forEach { $0.removeFromSuperview() }
for i in 0..<starsCount {
    if i < targetStar {
        let starView = UIImageView(image: star!.maskWithColor(color: UIColor.blue.cgColor, factor: 0))
        starView.contentMode = .scaleAspectFit
        uiStars.addArrangedSubview(starView)
    }
    else if i == targetStar {
        let starView = UIImageView(image: star!.maskWithColor(color: UIColor.blue.cgColor, factor: factor))
        starView.contentMode = .scaleAspectFit
        uiStars.addArrangedSubview(starView)
    }
    else {
        let starView = UIImageView(image: star!)
        starView.contentMode = .scaleAspectFit
        uiStars.addArrangedSubview(starView)
    }
}

我期待类似的东西

for i in 0..<starsCount {
    if i < targetStar {
        let view = uiStars.subviews[i]
        view.image = star!.maskWithColor(color: UIColor.blue.cgColor, factor: 0)
    }
    else if i == targetStar {
        let view = uiStars.subviews[i]
        view.image = star!.maskWithColor(color: UIColor.blue.cgColor, factor: factor)
    } 
    else {
        let view = uiStars.subviews[i]
        view.image = star!
    }
}

但它不起作用。

这是工作:

let targetStar = Int(floorf(value * Float(uiStars.subviews.count))) - 1
let factor = CGFloat(min(1, max(self.value, 0)))
let starsCount = uiStars.subviews.count
for i in 0..<starsCount {
    if i < targetStar {
      let view = uiStars.subviews[i] as! UIImageView
      view.image = star!.maskWithColor(color: UIColor.blue.cgColor, factor: 0)
    } else if i == targetStar {
        let view = uiStars.subviews[i] as! UIImageView
        view.image = star!.maskWithColor(color: UIColor.blue.cgColor, factor: factor)
    } else {
        let view = uiStars.subviews[i] as! UIImageView
        view.image = star!
    }
}

最新更新