Как изменить изображение в подпредставлениях (UIImageView) во время выполнения? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть uiStackView с 5 UIImageViews, мне нужно изменить изображение в этом 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!
    }
}

Но это не работает.

1 Ответ

0 голосов
/ 24 декабря 2018

Это работа:

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!
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...