NSScrollView в окне NSWindow - PullRequest
       7

NSScrollView в окне NSWindow

4 голосов
/ 02 июля 2011

У меня есть NSScrollView внутри NSWindow, но, кажется, он отключен. Он выглядит так, как будто он будет работать, но полосы прокрутки не реагируют на мышь или колесо прокрутки.

Когда я помещаю точно такой же NSScrollView в окно в новом проекте XCode, он отлично работает. Что-то в том, как я создаю окно, препятствует работе прокрутки.

Мне удалось упростить это до этого примера:

//Make a window
NSWindow* myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(300, 300, 300, 300)
                                       styleMask:NSTitledWindowMask
                                       backing:NSBackingStoreRetained
                                       defer:NO];

//Make a scroll view
NSScrollView *scrollview = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)];
[scrollview setHasVerticalScroller:YES];
[scrollview setAcceptsTouchEvents:YES];
[myWindow setContentView:scrollview];

//Add something big to the scroll view
NSButton* btn = [[[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 600, 900)] autorelease];
[scrollview setDocumentView:btn];

//Show the window
[NSApp arrangeInFront:self];
[myWindow makeKeyAndOrderFront:self];
[NSApp activateIgnoringOtherApps:YES];

Есть идеи?

1 Ответ

7 голосов
/ 02 июля 2011

Ваша проблема, основанная на некоторых экспериментах, которые я только что провел, похоже, связана с указанием NSBackingStoreRetained. Документы говорят:

Вы не должны использовать этот режим. Он сочетает в себе ограничения NSBackingStoreNonretained с использованием памяти NSBackingStoreBuffered.

Они также говорят:

В Mac OS X 10.5 и более поздних версиях запросы на сохраненные окна приведут к тому, что оконная система создаст буферизованное окно, поскольку это лучше соответствует фактическому использованию.

Кажется, это не совсем точно; переключение аргумента buffer: на NSBackingStoreBuffered заставило представление окна и прокрутки вести себя как ожидалось для меня. (В документах также говорится, что не следует использовать NSBackingStoreNonRetained, и, действительно, похоже, что проблемы похожи на NSBackingStoreRetained.)

...