Cocoa - 如何使嵌套的NSViews和CALayers等比例缩放

3

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

当窗口调整大小时,我希望整个内容都按比例调整大小。在设置时,什么是正确的方法可以实现这一点呢?

谢谢

编辑:我完全没有使用Interface Builder。


文档建议设置视图的边界,这样当框架改变时它们就会保持不变。理论上,如果边界不改变,则内容在框架更改时将使用变换进行渲染。但我还没有找到如何使边界保持不变的方法。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23//apple_ref/doc/uid/TP40002978-CH10-SW10 - Douglas
1个回答

1

这是我为了让NSView的内容在调整父窗口大小时按比例缩放所做的工作。首先,在界面构建器中,我将我的NSView添加到窗口中,然后在我的AppDelegate中添加了对它的引用。我的NSView被称为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的内容将平稳地缩小。


有没有办法为NSView本身设置setContentAspectRatio等内容? - Alex Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接