NSScrollView как подпредставление ошибки представления на уровне слоя? - PullRequest
4 голосов
/ 02 мая 2011

Когда я делаю NSScrollView подпредставлением представления со слоем (например, выбирая NSTextView или NSTableView из IB), я вижу странное поведение рисования в представлении документа представления прокрутки.

Для иллюстрации я создал простой проект с NSTextView в окне. Единственный код, который я написал, - включить поддержку слоев для представления содержимого окна:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[self.window contentView] setWantsLayer:YES];
}

Это результат ввода текста в текстовое представление. Красные подчеркивания не выстраиваются должным образом:

http://mowglii.com/random/screenshot.png

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

Есть идеи, что происходит?

1 Ответ

4 голосов
/ 02 мая 2011

NSScrollView действительно плохо себя ведет, когда встроен в представление со слоями.

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

Обычно вам, тем не менее, нужно смотреть глубже в трюки. А именно: держите поддержку слоя выключенной. Нарисуйте вид в изображение, отобразите это изображение в режиме наложения с включенной поддержкой слоев. Анимируйте этот вид на изображение конечного состояния. Затем удалите вид наложения, чтобы показать фактическое конечное состояние ниже.

...