OSX Cocoa: ошибка при сбросе цветов в двух реализациях метода drawRect

У меня есть подкласс таблицы NSView, который содержит несколько блоков подкласса Block NSView. Это код для метода DrawRect: Table:

- (void)drawRect:(NSRect)dirtyRect
{
    [NSGraphicsContext saveGraphicsState];
    [[[NSColor whiteColor] colorWithAlphaComponent:0.6] set];
    [NSBezierPath fillRect:dirtyRect];
    [NSGraphicsContext restoreGraphicsState];
}

И это код метода DrawRect: блока:

-(void)drawRect:(NSRect)dirtyRect
{
    [NSGraphicsContext saveGraphicsState];
    [color set];
    [NSBezierPath fillRect:dirtyRect];
    [NSGraphicsContext restoreGraphicsState];
}

где "цвет" установлен на [[NSColor whiteColor] colorWithAlphaComponent: 0].

Но я не понимаю, почему, когда я запускаю приложение, все в порядке, но каждый раз, когда я нажимаю на блок, он заполняется классическим серым начальным фоном в Mac OS X ... может ли кто-нибудь помочь? Буду очень признателен, спасибо.


person BigCola    schedule 03.11.2012    source источник


Ответы (1)


Измените вызов DrawRect блока с «colorWithAlphaComponent» на «1.0», и я думаю, у вас все будет готово.

Альфа, равная нулю, означает прозрачную непрозрачность. Ознакомьтесь с темами по программированию цвета от Apple, и вы увидите, что они несколько раз упоминают «альфа».

p.s. вы можете изменить имя класса «Блок», поскольку это может сбить с толку людей, которые думают о традиционных блоках Objective C ^ {}.

person Michael Dautermann    schedule 03.11.2012
comment
Да, но я хотел, чтобы он был прозрачным, потому что изначально я хотел добавить градиент в фон таблицы ... однако, когда я пытался это сделать, каждый раз, когда я нажимал на блок, он добавлял градиент к своему фону и Я не понимаю почему ... Надеюсь, ты сможешь помочь - person BigCola; 04.11.2012
comment
@MichaelDautermann Michael, не могли бы вы помочь мне с моей проблемой drawRect: stackoverflow.com/questions/39855349/ - person Andy Fedoroff; 07.10.2016