NSOutlineView градиентный фон - PullRequest
4 голосов
/ 09 января 2012

Я пытаюсь реализовать подкласс NSOutlineView с градиентным фоном:

- (void)drawBackgroundInClipRect:(NSRect)clipRect {
    [gradient drawInRect:clipRect angle:90];
}

Это почти работает так, как предполагалось

Но когда я изменяю размеры, градиент "ломается":

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

Ответы [ 3 ]

2 голосов
/ 10 января 2012

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

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

1 голос
/ 11 января 2012

Мне пришлось перейти на NSOutlineView на основе представления, с ним прекрасно работает следующий код:

- (void)drawBackgroundInClipRect:(NSRect)clipRect {
    [gradient drawInRect:self.frame angle:90];
}
0 голосов
/ 11 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...