2011-01-09 7 views
3

NSWindowのcontentViewはNSViewサブクラスです。サブビューとしていくつかの他のNSViewサブクラスがあります。サブビューはレイヤーベースであり、これらのレイヤーはサブレイヤーを含みます。サブレイヤのうちのいくつかは、さらにサブレイヤを有する。cocoa - ネストされたNSViewsとCALayersを比例的にサイズ変更する

ウィンドウのサイズが変更されたときに全体の大きさを比例して変更したい。起こるようにそれを設定する正しい方法は何ですか?

おかげ

編集:私はすべてのインターフェイスBuilderを使用していません。

+0

ドキュメントでは、ビューの境界を設定すると、フレームが変更されたときに固定されたままになることが示唆されています。理論的には、境界が変更されない場合、フレームが変更されたときにコンテンツが変換でレンダリングされます。しかし、私は境界を未解決のままにする方法を研究していません。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23//apple_ref/doc/uid/TP40002978-CH10-SW10 – Douglas

答えて

1

親ウィンドウのサイズを変更するとNSViewの内容が比例して拡大されるようにしています。最初に、インターフェイスビルダーで、自分のNSViewをウィンドウに追加し、AppDelegateにNSViewのリファレンスを追加しました。私のことはscrollViewと呼ばれることがあります。 scrollViewから自動サイジングの動作をすべて削除しました。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // keep the aspect ratio constant so that the content looks good 
    [window setContentAspectRatio:NSMakeSize(2, 1)]; 
    window.delegate = self; 
} 

- (void)windowDidResize:(NSNotification *)notification { 
    // size the scrollView to fill the window, but keep its bounds constant 
    NSRect rect = [[window contentView] frame]; 
    NSRect oldBounds = [scrollView bounds]; 
    [scrollView setFrame:rect]; 
    [scrollView setBounds:oldBounds]; 
} 

これはあまりにも窓デリゲートにAppDelegateを回す:

その後、私AppDelegateに私はこれを追加しました。私はそれに多くの論理を持っていないので、良い。フレームを変更しながら境界を一定に保つことによって、scrollViewの内容はスムーズに縮小されます。

+0

にはNSViewなどの 'setContentAspectRatio'自体? –

関連する問題