Intereting Posts
Как добавить Core Data в уже созданный проект iOS Как отменить или заблокировать входящие вызовы программно в iOS? Является ли это возможным? не может кодировать ответ ping в строку с помощью swift Как приостановить игру в SpriteKit и SceneKit – SWIFT Является ли NSMutableArray рекурсивным в выпуске его предметов? FB ios SDK не возвращается в приложение – не удается найти проблему в plist изменить изображение UITableViewCellEditingStyleDelete SWRevealViewController с TabbarController установлен как rootViewController VoiceOver и асинхронный UITableView Как преобразовать объект CoreData в NSData ios – фатальная ошибка: неожиданно найден нуль при развертывании необязательного значения (lldb) Основные данные: зачем создавать пользовательские постоянные хранилища? значение переменной, вызывающее ошибку: программа сбоя IR-генерации слишком умна Приложение WatchKit зависает и падает через Crashlytics Что такое высота modalPresentationStyle – FormSheet на iPad?

цвет как функция положения ползунка для установки цвета

Я пытаюсь создать инструмент выбора цвета, который пользователь может использовать. В наборе цветов есть ползунок всех цветов и дополнительный ползунок, чтобы установить, насколько темный цвет. Оба показаны на изображениях 1 и 2:

Изображение 1 : выбирает цвет:

Изображение 1

Изображение 2 : устанавливает, как темный цвет

введите описание изображения здесь

Я знаю, что я мог бы использовать пользовательский образ для слайдера, и чем соответствовать каждому цвету с позицией, это означало бы, что мне нужно будет создать огромный массив и много работать. Второй слайдер, который устанавливает, как темный цвет все равно должен быть вычислен во время выполнения. Я сомневаюсь, что этот подход хорош, и поэтому спрашивайте, есть ли у вас лучшая идея о том, как решить эту проблему. Возможно, математическая функция, которая связывает цвет с положением ползунка, цвет (x), где x – положение ползунка, будет делать трюк. Итак, как создать цвет как функцию положения и создать слайдер на основе этой математической функции?

То, как я делал это раньше, – это просто использование изображений.

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

В разных приложениях уже есть встроенный градиент оттенка (Pixelmatr и Photoshop оба).

Просто создайте изображение градиента оттенка и используйте его за слайдером оттенка.

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

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

введите описание изображения здесь

«Ползунок» слева использует одно изображение с градиентом оттенка.

Справа «яркость / насыщенность» справа используется одно изображение с белым прозрачным градиентом слева направо и черно-прозрачный градиент снизу вверх. Затем мне нужно установить цвет фона на основе оттенка.

пример

Все цвета в iOS используют цвета на основе 0.0-1.0.

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

Таким образом, у вас есть позиция CGPoint и вам нужно получить процент.

Каждый цвет «3 мерный» (4 с альфой, но я его не включил), поэтому вам нужно три процента.

Для просмотра оттенков это легко …

 // put this inside the hue view (if you're not using a UISlider // this works vertically you ay need yours to work horizontally. - (CGFloat)hueValueForTouchPosition:(CGPoint)touchPoint { return touchPoint.y / CGRectGetHeight(self.frame); } 

Это вернет правильное значение оттенка, основанное на положении касания в представлении.

Теперь вы можете использовать это, чтобы установить цвет фона для представления яркости.

 // this will change the background color of the brightness view to match the selected hue CGFloat hue = [self.hueView hueValueForTouchPosition:touchPoint]; self.brightnessView.backgroundColor = [UIColor colorWithHue:hue brightness:1.0 saturation:1.0 alpha:1.0]; 

Теперь вам просто нужно сделать то же самое с яркостью

Вы можете сделать так:

  1. Получите UITouch событий UITouch , реализовав в подклассе слайдер.

  2. Получить position(CGPoint) точек касания.

  3. Сделайте расчет, как показано ниже

    При максимальной яркости будет 1.0 уменьшить его, используя следующие

     CGFloat currentBrightness = 1.0 - ((position.x - slider.frame.origin.x)/slider.frame.size.width); UIColor *newColor = [UIColor colorWithHue:currentHue saturation:currentSaturation brightness:currentBrightness alpha:1.0]; 

Где currentHue и currentSaturation будут вычисляться из ползунка выбора цвета.

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

Для RGB

 [UIColor colorWithRed:slider1.value Green:slider2.value Blue:slider3.value alpha:1.0]; 

Для HSB

 [UIColor colorWithHue:slider1.value saturation:slider2.value brightness:slider3.value alpha:1.0]; 

Что касается динамической установки фонового градиента ползунков, то градиент для каждого ползунка можно получить, изменив его значение, сохранив остальные две константы.

например, если H:0.2 S:0.6 B:0.5 – текущая позиция ползунка, тогда градиенты будут –

Slider1 : H: 0,0 S: 0,6 B: от 0,5 до H: 1,0 S: 0,6 B: 0,5
Slider2 : H: 0,2 S: 0,0 B: от 0,5 до H: 0,2 S: 1,0 B: 0,5
Slider3 : H: 0,2 S: 0,6 B: от 0,0 до H: 0,2 S: 0,6 B: 1,0

ИЛИ

если вы хотите идти простым путем, там есть множество библиотек. См., Например,