NSScrollView как подвид ошибки представления с поддержкой слоев?

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

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

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

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

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

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

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


person sam    schedule 02.05.2011    source источник


Ответы (1)


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

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

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

person Pierre Bernard    schedule 02.05.2011
comment
Полезно знать, что это известная проблема. Это довольно удивительно. - person sam; 04.05.2011