Проблемы с исчезновением содержимого окон без полей

Если я удаляю этот метод из моего обзора, все работает нормально (контент не исчезает, если я нажимаю на кнопку), так что это определенно причина.

Я пытаюсь сделать окно, которое округляется и имеет градиент с помощью кода ниже. Что-то не так с этим, что может привести к исчезновению контента в представлении?

- (void)drawRect:(NSRect)dirtyRect
{
    [NSGraphicsContext saveGraphicsState];

    NSBezierPath *outerClip = [NSBezierPath bezierPathWithRoundedRect:[self bounds]
                                                              xRadius:3.0
                                                              yRadius:3.0];
    [outerClip setClip];

    NSGradient* aGradient = [[NSGradient alloc]
                             initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:1.0]
                             endingColor:[NSColor colorWithCalibratedWhite:0.65 alpha:1.0]];

    [aGradient drawInRect:[outerClip bounds] angle:270];

    [NSGraphicsContext restoreGraphicsState];

}

2 ответа

Решение

Переключение на NSGradient drawInbezierPath устраняет проблему.

Я знаю, что вы ответили на свой вопрос, но я подумал, что поделюсь, почему ваш контент исчезает с помощью приведенного выше кода.

Когда вы используете setClip Вы удаляете предыдущий путь отсечения и заменяете его новым путем. Это означает, что вы будете рисовать за пределами грязной области, перезаписывая ранее нарисованный контент.

У меня была та же проблема с рисованием закругленных углов на моем собственном заставке, и в конце концов я нашел другой способ сделать то, что хотел.

Также вы можете использовать clipRect: метод класса NSBezierPath изменить обтравочный контур до пересечения существующего пути и области, в которую вы хотите ограничить рисование. Конечно, сохранить и восстановить графическое состояние вокруг вашего звонка clipRect:,

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