Пользовательское свойство цвета фона IBDesignable не обновляется в зависимости от цели - PullRequest
0 голосов
/ 15 мая 2019

У меня очень специфическая проблема с XCode.

Настройка

Цвета с одинаковыми именами в мишенях

У меня есть две цели в моем проекте XCode, Цель A и Цель B .

У них обоих есть отдельная папка ресурсов с именем Colors.xcassets с цветом "Primary" . Цвет "Основной" в Цель A красный , а в Цель B синий .

Обе цели имеют раскадровку со стандартными элементами пользовательского интерфейса, использующими цвет «Основной». Построение и запуск целей приводит к тому, что интерфейс отображает правильный «основной» цвет для цели.

Общий IBDesignable

Обе цели назначены одному и тому же IBDesignable класс для пользовательского UIButton, который отображает цвета, создавая UIImage в качестве фона, чтобы его можно было округлить.

Фоновое изображение устанавливается путем вызова следующей функции, когда кнопка инициализируется или задается свойство цвета:

private func refreshBackgroundWith(color: UIColor) {

    let image = createImageFrom(color: color)
    setBackgroundImage(image, for: UIControl.State.normal)

    clipsToBounds = true
}

Изображение создано так:

private func createImageFrom(color: UIColor) -> UIImage {

    // If color is clear, return clear image
    if(color == UIColor.clear) {
        return UIImage()
    }

    UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), true, 0.0)
    color.setFill()
    UIRectFill(CGRect(x: 0, y: 0, width: 1, height: 1))
    let image = UIGraphicsGetImageFromCurrentImageContext()!

    return image
}

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

1039 * Expectation * Я ожидаю, что кнопка IBDesignable создаст фоновое изображение на основе цвета, который я назначил ему в раскадровке, и этот цвет будет другим, когда я создаю разные цели. Результат

Когда я собираю и запускаю цель B, цвет кнопки IBDesignable отображается красным, хотя я ожидаю синий. Это также может произойти и в обратном направлении, когда я создаю цель А, и она показывает синий вместо красного.

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

Какой цвет отображается в названном палитре цветов, тот же, который отображается в IBDesignable. Этот цвет меняется случайным образом при каждом выключении и перезапуске XCode.


Кто-нибудь сталкивался с такой или подобной проблемой раньше? В настоящее время мне интересно, в какой момент процесса сборка не идет так, как ожидалось.

Может ли это быть проблемой неполной перестройки проекта каждый раз, когда я собираю его для запуска?

Любые предложения приветствуются.

...