2011-07-01 19 views
4

NSWindow内にNSScrollViewがありますが、無効になっているようです。 と同じように見えますが、スクロールバーはマウスまたはスクロールホイールに対してと反応しません。です。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]; 

任意のアイデア?

答えて

7

問題は、私がやったいくつかの実験に基づいて、NSBackingStoreRetainedと指定されているようです。ドキュメントの内容は次のとおりです。

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

彼らはまた言う:MacのOS X 10.5では

以降、保持窓に対する要求はより良い一致実際に使用すると、バッファリングウィンドウを作成、ウィンドウシステムになります。

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

+0

はい、はいです。 NSBackingStoreBufferedはそれを修正しました。どうもありがとうございます。また、NSWindowのいくつかのビューでは、他の不安定な問題のカスケードも修正されました。 – bendytree

関連する問題