Преобразование NSGradient в NSColor

Можно ли преобразовать NSGradient в NSColor

- (void) viewWillDraw {
    NSGradient *grad = [[NSGradient alloc] initWithStartingColor:[NSColor lightGrayColor]    endingColor:[NSColor darkGrayColor]];
    [super setBackgroundColor:*gradient*;
}

Это мой метод, я хочу иметь возможность передавать NSGradient как NSColor, что, очевидно, я не могу, есть ли способ преобразовать его в один?


person benj9a4    schedule 22.04.2013    source источник


Ответы (2)


В 10.8 вы можете создать в следующем порядке:

  1. Блок, который рисует градиент так, как вам нравится.
  2. Изображение, поддерживаемое блоком.
  3. Цвет, который повторяет изображение как узор.

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

Тем не менее, это может работать неправильно с изменением размера окна, если вы пытаетесь адаптировать градиент к размеру фона (используя прямоугольник, переданный в блок), а фон представляет собой текстовое представление в представлении прокрутки. (Когда я попробовал это некоторое время назад, шаблон не перерисовывал блок; он просто замостился, что выглядело странно по крайней мере в одном измерении.) Если либо ваш градиент, либо ваше окно имеют фиксированный размер, у вас не будет этой проблемы. .

person Peter Hosey    schedule 22.04.2013
comment
Как создать изображение с градиентом? - person benj9a4; 22.04.2013
comment
@ benj9a4: вы создаете изображение, поддерживаемое градиентом, создавая изображение, поддерживаемое блоком, который рисует градиент. - person Peter Hosey; 22.04.2013

NSGradient нельзя преобразовать в NSColor.

Класс NSGradient обеспечивает поддержку отрисовки градиентных цветов заливки, также известных как затенение в Quartz. Этот класс предоставляет удобные методы для рисования радиальных или линейных (осевых) градиентов для прямоугольников и объектов NSBezierPath.

Поскольку вы хотите установить viewBackground для эффекта (эффект градиента), вам нужно сделать следующее:

[grad drawInRect:<the rect of your view> angle:270]; //angle is upto your requirement,
person Anoop Vaidya    schedule 22.04.2013
comment
@PeterHosey: мы не можем сделать это в drawRect? - person Anoop Vaidya; 22.04.2013
comment
drawRect: это гораздо лучшее место для этого. Если спрашивающий рисует это из клетки, другим подходящим местом будет drawInteriorWithFrame:inView:. - person Peter Hosey; 22.04.2013