Ответ 1
У меня был тот же вопрос, что и вы. К сожалению, нет встроенного выбора цвета для iOS. Другие ответы здесь и для подобных вопросов в основном используют сторонние библиотеки или проекты. Я предпочитаю избегать всех сторонних вещей, когда это возможно, так что это оставляет нас...
Сделайте свой собственный подборщик цветов
Есть много способов сделать это, но вот простой пример, чтобы показать концепцию. Я создал свою панель сообщений так:
Он имеет UIView
(серый здесь), чтобы отобразить выбранный цвет, a UIImageView
, чтобы отобразить выбор цвета, и UISlider
, чтобы выбрать цвет. Я использовал следующее изображение в UIImageView
:
Я сделал это из цветов цветного круга с 12 спицами с помощью экрана и инструмента выбора цвета Gimp. Gimp также полезен для получения цветовых шестнадцатеричных кодов, которые мы будем использовать позже.
Задайте минимальные и максимальные значения для ползунка 0,5 и 13,5. Преобразование значений слайдера в целые числа позже даст одно число для каждого из цветов на нашем изображении. Начиная с 0,5, а не с 0, положение слайдера изменит положение изображения лучше.
Подключите элементы интерфейса к контроллеру просмотра и используйте следующий код для преобразования положения ползунка в цвета.
class ViewController: UIViewController {
// RRGGBB hex colors in the same order as the image
let colorArray = [ 0x000000, 0xfe0000, 0xff7900, 0xffb900, 0xffde00, 0xfcff00, 0xd2ff00, 0x05c000, 0x00c0a7, 0x0600ff, 0x6700bf, 0x9500c0, 0xbf0199, 0xffffff ]
@IBOutlet weak var selectedColorView: UIView!
@IBOutlet weak var slider: UISlider!
@IBAction func sliderChanged(sender: AnyObject) {
selectedColorView.backgroundColor = uiColorFromHex(colorArray[Int(slider.value)])
}
func uiColorFromHex(rgbValue: Int) -> UIColor {
let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 0xFF
let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 0xFF
let blue = CGFloat(rgbValue & 0x0000FF) / 0xFF
let alpha = CGFloat(1.0)
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
}
Теперь, если вы запустите его, вы можете выбрать цвет, перемещая ползунок назад и вперед.
Варианты
- Поместите слайдер поверх изображения и установите прозрачность дорожек. Это дает ощущение пользовательского интерфейса без необходимости подкласса.
- Вот еще одно изображение с более светлыми и более темными вариантами образцового изображения проекта.
let colorArray = [ 0x000000, 0x262626, 0x4d4d4d, 0x666666, 0x808080, 0x990000, 0xcc0000, 0xfe0000, 0xff5757, 0xffabab, 0xffabab, 0xffa757, 0xff7900, 0xcc6100, 0x994900, 0x996f00, 0xcc9400, 0xffb900, 0xffd157, 0xffe8ab, 0xfff4ab, 0xffe957, 0xffde00, 0xccb200, 0x998500, 0x979900, 0xcacc00, 0xfcff00, 0xfdff57, 0xfeffab, 0xf0ffab, 0xe1ff57, 0xd2ff00, 0xa8cc00, 0x7e9900, 0x038001, 0x04a101, 0x05c001, 0x44bf41, 0x81bf80, 0x81c0b8, 0x41c0af, 0x00c0a7, 0x00a18c, 0x00806f, 0x040099, 0x0500cc, 0x0600ff, 0x5b57ff, 0xadabff, 0xd8abff, 0xb157ff, 0x6700bf, 0x5700a1, 0x450080, 0x630080, 0x7d00a1, 0x9500c0, 0xa341bf, 0xb180bf, 0xbf80b2, 0xbf41a6, 0xbf0199, 0xa10181, 0x800166, 0x999999, 0xb3b3b3, 0xcccccc, 0xe6e6e6, 0xffffff]
-
Используйте массив UIColors, чтобы избежать необходимости выполнять шестнадцатеричное преобразование.
-
Можно использовать несколько UIView, а не изображение, а затем установить цвета непосредственно из массива.