4

NSWindow 内に NSScrollView がありますが、無効になっているようです。動作するように見えますが、スクロールバーがマウスやスクロール ホイールに反応しません。

新しい XCode プロジェクトのウィンドウ内にまったく同じ NSScrollView を配置すると、完全に機能します。スクロールが機能しないウィンドウの作成方法について何かがあります。

私はそれをこの例に単純化することができました:

//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];

何か案は?

4

1 に答える 1

7

私が行ったいくつかの実験に基づくあなたの問題は、指定にあるようNSBackingStoreRetainedです。ドキュメントは言う:

このモードは使用しないでください。の制限NSBackingStoreNonretainedと のメモリ使用量を組み合わせNSBackingStoreBufferedます。

彼らはまた言います:

Mac OS X 10.5 以降では、保持されたウィンドウの要求により、ウィンドウ システムがバッファリングされたウィンドウを作成します。これは、実際の使用により適しているためです。

これは正確ではないようです。buffer:引数を切り替えてNSBackingStoreBuffered、ウィンドウとスクロールビューを期待どおりに動作させました。(ドキュメントには を使用しないようにも書かれていますNSBackingStoreNonRetainedが、実際には に似た問題があるようNSBackingStoreRetainedです。)

于 2011-07-01T23:22:24.137 に答える