2011-01-09 18 views
3

我的NSWindow的contentView是一個NSView子類。它有一些其他NSView子類作爲子視圖。子視圖是基於圖層的,而這些圖層又包含子圖層。某些子層還有其他子子層。cocoa - 獲取嵌套的NSViews和CALayers按比例調整

我希望在調整窗口大小時按比例重新調整大小。什麼是正確的方式來設置它,以便發生?

謝謝

編輯:我根本沒有使用接口生成器。

+0

該文檔建議設置視圖的邊界將導致它們在幀更改時保持固定。理論上,如果邊界沒有改變,那麼當幀改變時,內容將通過變換進行渲染。但我還沒有弄清楚如何讓界限保持不變。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23//apple_ref/doc/uid/TP40002978-CH10-SW10 – Douglas 2011-01-09 18:48:18

回答

1

下面是我在調整父窗口大小時按比例縮放NSView的內容。首先,在界面構建器中,我將NSView添加到窗口中,然後在我的AppDelegate中添加對它的引用。我的名字恰好叫做scrollView。我從scrollView中刪除了所有的自動調整行爲。

然後,在我的AppDelegate我加了這一點:

- (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中到窗口代表了。很好,因爲我沒有太多的邏輯。通過在改變幀的同時保持邊界不變,scrollView的內容將平滑地縮小。

+0

有沒有辦法`setContentAspectRatio`爲NSView等,本身? – 2012-07-15 09:31:42