NSView drawRect мешает подпредставлениям? - PullRequest
5 голосов
/ 21 апреля 2011

У меня есть nsview, и я использую рисовать прямоугольник, чтобы нарисовать изображение для фона.У этого также есть 3 nsbuttons подпредставлений.Проблема в том, что когда мышь нажимает на кнопку, другие кнопки исчезают.Но когда я удаляю метод draw rect, этого не происходит.Поэтому я предполагаю, что это связано с методом рисования прямоугольника для рисования изображений.

Как мне избежать этого?Спасибо.

РЕДАКТИРОВАТЬ: Хорошо, я понял, где проблема.По сути, у меня есть NSMenuItem, и я помещаю представление в него с 3 кнопками.Но в NSMenu вверху есть отступ в 4 пикселя.Таким образом, чтобы удалить это заполнение, я использовал решение, представленное здесь: Разрыв над пользовательским представлением NSMenuItem

Из решения есть строка в методе drawRect:

[[NSBezierPath bezierPathWithRect:fullBounds] setClip];

Момент, я убираю эту строку, и кнопка ведет себя правильно.Но потом, отступы сверху не уходят.

Вот мой розыгрыш:

- (void) drawRect:(NSRect)dirtyRect {

    [[NSGraphicsContext currentContext] saveGraphicsState];

    NSRect fullBounds = [self bounds];
    fullBounds.size.height += 4;
    [[NSBezierPath bezierPathWithRect:fullBounds] setClip];

    NSImage *background = [NSImage imageNamed:@"bg.png"];
    [background drawInRect:fullBounds fromRect:NSZeroRect operation:NSCompositeCopy fraction:100.0];

    [[NSGraphicsContext currentContext] restoreGraphicsState];
}

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Решение связанного вопроса не включает в себя сохранение и восстановление графического состояния, что является хорошей идеей, когда вы изменяете то, что не создали. Попробуйте это:

- (void)drawRect:(NSRect)dirtyRect {
   // Save the current clip rect that has been set up for you
   [NSGraphicsContext saveGraphicsState];
   // Calculate your fullBounds rect
   // ...
   // Set the clip rect
   // ...
   // Do your drawing
   // ...
   // Restore the correct clip rect
   [NSGraphicsContext restoreGraphicsState]
0 голосов
/ 21 апреля 2011

Вы уверены, что эти кнопки на самом деле являются подпредставлениями, а не просто размещены над видом, который вы рисуете?

...