У меня очень специфическая проблема с 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.
Кто-нибудь сталкивался с такой или подобной проблемой раньше? В настоящее время мне интересно, в какой момент процесса сборка не идет так, как ожидалось.
Может ли это быть проблемой неполной перестройки проекта каждый раз, когда я собираю его для запуска?
Любые предложения приветствуются.