可可 - 使嵌套的NSView和CALayers按比例调整大小

时间:2011-01-09 17:30:28

标签: cocoa calayer nsview resize autoresizingmask

我的NSWindow的contentView是一个NSView子类。它有一些其他NSView子类作为子视图。子视图是基于图层的,而这些图层又包含子图层。一些子层具有更多子子层。

我希望整个窗口调整大小时按比例调整大小。设置它的正确方法是什么呢?

由于

编辑:我根本不使用Interface Builder。

1 个答案:

答案 0 :(得分: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的内容将平滑缩小。