Проблемы с исчезновением содержимого окон без полей
Если я удаляю этот метод из моего обзора, все работает нормально (контент не исчезает, если я нажимаю на кнопку), так что это определенно причина.
Я пытаюсь сделать окно, которое округляется и имеет градиент с помощью кода ниже. Что-то не так с этим, что может привести к исчезновению контента в представлении?
- (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:
,