NSScrollView в окне NSWindow
У меня есть 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 ответ
Ваша проблема, основанная на некоторых экспериментах, которые я только что сделал, похоже, связана с указанием NSBackingStoreRetained
, Документы говорят:
Вы не должны использовать этот режим. Он сочетает в себе ограничения
NSBackingStoreNonretained
с использованием памятиNSBackingStoreBuffered
,
Они также говорят:
В Mac OS X 10.5 и более поздних версиях запросы на сохраненные окна приведут к тому, что оконная система создаст буферизованное окно, поскольку это лучше соответствует фактическому использованию.
Это не кажется точным; переключение buffer:
аргумент NSBackingStoreBuffered
заставил окно и представление прокрутки вести себя как ожидалось для меня. (Документы также говорят, что не использовать NSBackingStoreNonRetained
и на самом деле, похоже, проблемы, аналогичные NSBackingStoreRetained
.)