Пользовательский NSView рисует поверх элементов управления

У меня есть NSView с пользовательским подклассом, который рисует сетку из прямоугольников со скругленными углами внутри него. это NSView был размещен с помощью построителя интерфейса и поверх него у меня есть некоторые NSButtons.

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

Вот кодовая форма drawRect:

[NSGraphicsContext saveGraphicsState];

NSBezierPath *path = [NSBezierPath bezierPathWithRect:self.bounds];
[[NSColor grayColor] set];
[path fill];

[NSGraphicsContext restoreGraphicsState];

for( int r = 0; r < 15; r++ ){
    for( int c = 0; c < 15; c++ ) {

        [NSGraphicsContext saveGraphicsState];

        // Draw shape
        NSRect rect = NSMakeRect(20 * c, 20 * r, 15, 15);
        NSBezierPath *roundedRect = [NSBezierPath bezierPathWithRoundedRect: rect xRadius:1 yRadius:1];

        [roundedRect setClip];

        // Fill
        [[NSColor colorWithCalibratedHue:0 saturation:0 brightness:0.3 alpha:1] set];
        [roundedRect fill];


        // Stroke
        [[NSColor colorWithCalibratedHue:0 saturation:0 brightness:0.5 alpha:1] set];
        [roundedRect setLineWidth:2.0];
        [roundedRect stroke];

        [NSGraphicsContext restoreGraphicsState];

    }
}

Вот скриншот:Скриншот

Обновление: упрощен код, добавлен скриншот.

2 ответа

У Mac есть проблемы с перекрывающимися одноуровневыми представлениями. это не работало раньше.... 10.6, и это все еще не работает довольно часто.

использовать правильную иерархию супервизии / подпредставления

Хорошо, я только что решил эту проблему, удалив setClip и найти другой способ нарисовать внутренний штрих.

Я уверен, что это можно решить, еще используя setClip но это решение работало хорошо для меня на этот раз.

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