drawSwatchInRect рисует диагональную линию при использовании NSColor с альфа
Я пытаюсь нарисовать прозрачный цвет подсветки в моем TableView довольно просто:
if ([self isSelected]){
self.alphaValue = 0.5f;
NSColor * fillColor = [NSColor colorWithCalibratedRed: 100.0f/256.0f
green: 100.0f/256.0f
blue: 100.0f/256.0f
alpha: 0.5];
[fillColor drawSwatchInRect:dirtyRect];
}
Тем не менее, он рисует что-то немного странное, прямую линию между исходным цветом и новым альфа-цветом. Я знаю, что решение, вероятно, довольно простое - но я не могу понять, что это такое. Есть идеи?
1 ответ
Я думаю, что это только то, что drawSwatchInRect:
предназначен для этого. Когда у вас есть какое-либо альфа-значение, образец показывает, как выглядит ваш цвет, когда он состоит из черного (слева вверху) и белого (справа внизу). Когда компоненты Apple UI отображают цвет, они делают это. Это более очевидно, если используемый вами цвет не является оттенком серого.
Если вы хотите залить прямоугольник определенным цветом, пропуская фон, попробуйте это:
[fillColor set];
NSBezierPath *rectPath = [NSBezierPath bezierPathWithRect:dirtyRect];
[rectPath fill];
Хотя это будет работать для заполненных ритейлов, учтите, что dirtyRect
не всегда одна и та же форма. Для большинства рисунков, вы хотите использовать bounds
вид, который рисуется.