2015-11-27 4 views
1

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

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

Image 1

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

enter image description here

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

+0

Я не рассчитали для яркости цвета, но я предлагаю вам использовать 'UIColor' метод' + (UIColor *) colorWithHue: (CGFloat) насыщенность оттенка: (CGFloat) яркость насыщенности: (CGFloat) яркость альфа: (CGFloat) alpha; 'и изменение яркости при движении ползунка. – Kampai

+0

Возможно ли создать слайдер на основе метода (UIColor * colorWithHue ....), чтобы получить визуальное представление о том, что выглядит цвет? – brumbrum

+0

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

ответ

2

Способ, которым я это сделал раньше, - это просто использовать изображения.

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

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

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

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

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

enter image description here

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

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

Пример

Все цвета в прошивкой использовать 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]; 

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

+0

это подходит шов лучший. Как визуализировать цвет пикселя в зависимости от положения пикселя? было бы жадно, если бы был метод, который принимает пиксель и выводит цвет этого пикселя. – brumbrum

+0

Вы можете создать этот метод очень легко. Но не пытайтесь быть идеальным пикселем. Позвольте мне привести пример. – Fogmeister

+0

Хорошо. Вы также упомянули использование градиентного изображения в качестве слайдера. Это действительно то, что я хочу, но я не знаю, как установить связь между положением ползунка и выбранным цветом. – brumbrum

2

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

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

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

  3. Do расчет, как показано ниже

    При максимальной яркости будет 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 будут рассчитываться от ползунка выбора цвета.

+0

Я считаю, что вопрос заключается в рендеринг слайдеров, а не в использовании ползунков для создания цвета. – Fogmeister

1

Вам нужны не менее трех ползунков, они могут быть ползунками 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: Н: 0,0 S: 0,6 В: 0.5 к Н: 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: Н: 0,2: 0,6 S B: 0,0 до Н: 0,2 S 0,6: B: 1,0

ИЛИ

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

+0

Я считаю, что вопрос заключается в том, как визуализировать слайдеры, а не как использовать ползунки для создания цвета. – Fogmeister