Сгенерировать градиент цветов для диаграммы

#ios #swift #uicolor #ios-charts

#iOS #swift #uicolor #ios-диаграммы

Вопрос:

Я создаю небольшую круговую диаграмму, и я хотел бы, чтобы каждая запись на диаграмме становилась все светлее и светлее, чем меньше становятся кусочки круга. Я должен сгенерировать массив UIColor , чтобы раскрасить диаграмму.

Вот что у меня есть прямо сейчас:

 for i in 0..<entries.count {
    let percent = 1.0 - (CGFloat(i - 1)/CGFloat(entries.count))
    dataSet.colors.append(UIColor.systemPurple.withAlphaComponent(percent))
}
  

И он генерирует это:
плохой пример круговой диаграммы

Я бы хотел, чтобы цвета на диаграмме были больше похожи на это: (извините, я просто быстро сделал это в Google таблицах в качестве примера) хорошая круговая диаграмма

Есть идеи?

Комментарии:

1. ваша формула let percent = 1.0 — (CGFloat (i — 1) / CGFloat (entries.count)) для меня странная, попробуйте проверить процентное значение для каждого цикла

2. Я попробую

Ответ №1:

Попробуйте использовать это решение.

 var initialAlpha = 1.0

for i in 0..<entries.count { 
    dataSet.colors.append(UIColor.systemPurple.withAlphaComponent(initialAlpha))
    initialAlpha -= 0.1
}
  

Вы также можете изменить значение разницы 0,1 на любое дробное значение, скажем, 0,15 или 0,2 и т.д. В соответствии с вашими требованиями.

Комментарии:

1. Хорошая идея, я попробую и свяжусь с вами

2. Это сработало! В итоге я вычел из суммы долю элементов набора в общем проценте следующим образом: initialAlpha -= CGFloat(1)/CGFloat(entries.count)

Ответ №2:

Возможно, вы захотите использовать другую цветовую модель, такую как HSB, и изменять один или несколько из этих параметров для разных цветов. В вашем случае похоже, что вы используете ярко-фиолетовый цвет и хотите изменить насыщенность от 100% до 0%.

Затем вы могли бы создать свои цвета, используя инициализатор UIColor init(hue:saturation:brightness:alpha:)

Немного доработав его, цвета со значениями оттенка 300, яркости 100% и насыщенности 100%, 80%, 60%, 40%, 20% и 0% выглядели прилично.