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 вид, который рисуется.

Другие вопросы по тегам