NSScrollView портит NSGradient (коррупция) - PullRequest
2 голосов
/ 24 июня 2011

У меня есть пользовательская коробка, которая является подклассом NSBox.Я переопределяю метод drawRect: и рисую градиент в нем следующим образом (при условии, что у меня уже есть цвет start & end):

-(void)drawRect:(NSRect)dirtyRect {
    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:start endingColor:end];
    [gradient drawInRect:dirtyRect angle:270];
    [gradient release];
}

Теперь это поле добавляется как подпредставлениепрототип для NSCollectionView.В исходном состоянии представления это выглядит следующим образом:

enter image description here

А после прокрутки вида из поля зрения и обратно снова это выглядит так:

enter image description here

Почему мой градиент так портится и как я могу это исправить?Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

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

Попробуйте:

[gradient drawInRect:[self bounds] angle:270];

.

Еще одно замечание: похоже, что ваш градиентный объект может быть кэширован, а не создан / выпущен внутри -drawRect:.

1 голос
/ 24 июня 2011

Ваша проблема в том, что вы рисуете dirtyFrame, а не весь прямоугольник поля.Я понятия не имею, если это правильно, но попробуйте это:

-(void)drawRect:(NSRect)dirtyRect {
    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:start endingColor:end];
    [gradient drawInRect:[self bounds] angle:270];
    [gradient release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...