UIImageView tintColor установлен, не применяя цвет к изображению в любом случае - PullRequest
0 голосов
/ 11 сентября 2018

У меня в приложении есть UIImageView, отображающее статическое изображение.Изображение устанавливается как всегда в шаблоне менеджера ресурсов.Вот инспектор при захвате интерфейса во время выполнения:

The inspector when selecting the image view.

Кажется, что tintColor устанавливается, но не применяется (иличто-то??).Вот информация о доступности из той же панели, что и выше:

The accessibility information

Я попытался исправить это, используя этот вопрос , но этоне меняет внешний вид.Вот код, который я использую (вложенный в layoutSubview):

// mode is always set to `.alwaysTemplate` and the below branch
// never executes.
let mode = promptImageView?.image?.renderingMode
if mode != .alwaysTemplate {
    if let image = promptImageView?.image {
        let newImage = image.withRenderingMode(.alwaysTemplate)
        promptImageView!.image = newImage
    }
}

Ответы [ 5 ]

0 голосов
/ 17 апреля 2019

Используйте приведенный ниже код для установки цвета оттенка изображения.

extension UIImage
{

    func tintWithColor(_ color:UIColor)->UIImage
    {

        UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale);
        //UIGraphicsBeginImageContext(self.size)
        let context = UIGraphicsGetCurrentContext()

        // flip the image
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.translateBy(x: 0.0, y: -self.size.height)

        // multiply blend mode
        context?.setBlendMode(.multiply)

        let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
        context?.clip(to: rect, mask: self.cgImage!)
        color.setFill()
        context?.fill(rect)

        // create uiimage
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!

    }

}

Используйте его как:

imageView.image = UIImage(named: "image")?.tintWithColor(color)
0 голосов
/ 11 сентября 2018
self.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
self.image.tintColor = UIColor.red

Это отражение отображается только на выходе во время выполнения, при захвате страницы статическое изображение отображает только

0 голосов
/ 11 сентября 2018

Попробуйте этот код и удалите все другие проверки состояния, если не требуется

imgBG.image = imgBG.image!.withRenderingMode(.alwaysTemplate)
imgBG.tintColor = UIColor.red
0 голосов
/ 11 сентября 2018

Вы должны удалить условие и сгенерировать изображение с экземпляром и предоставить цвет оттенка, который вы хотите установить.

 if let image = promptImageView?.image {
    let newImage = image.withRenderingMode(.alwaysTemplate)
    promptImageView!.image = newImage
    self.promptImageView.tintColor = .red
}
0 голосов
/ 11 сентября 2018

Кажется, это ошибка между Интерфейсным Разработчиком и кодом. При установке tintColor на один и тот же цвет более одного раза он не изменяется на целевой цвет во время выполнения. Здесь я исправил это, изменив цвет в Интерфейсном Разработчике, потому что .tintColor устанавливается до появления представления.

Исправлено путем изменения цвета в файле .xib на цвет, отличный от предполагаемого. Здесь я изменил его с белого на коричневый:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...