Objective c NSView缩放以适应自身和子视图

Objective c NSView缩放以适应自身和子视图,objective-c,macos,cocoa,nsview,nswindow,Objective C,Macos,Cocoa,Nsview,Nswindow,我有一个NSView(父项),它可以有任意数量的子项NSView。用户使用诸如添加图像/背景视图等按钮添加新视图。通常,父视图可以有任何大小(假设为1200x1800),子视图也可以有任何大小(例如,每个大小为600x900)(假设我有4个子视图,位置如下。它们覆盖了整个父视图。父视图也不是主窗口的直接内容视图 child view 1 (0,0,600,900) child view 2 (601,0,600,900) child view 3 (0,901,600,900) child vi

我有一个NSView(父项),它可以有任意数量的子项NSView。用户使用诸如添加图像/背景视图等按钮添加新视图。通常,父视图可以有任何大小(假设为1200x1800),子视图也可以有任何大小(例如,每个大小为600x900)(假设我有4个子视图,位置如下。它们覆盖了整个父视图。父视图也不是主窗口的直接内容视图

child view 1 (0,0,600,900)
child view 2 (601,0,600,900)
child view 3 (0,901,600,900)
child view 4 (601,901,600,900)
该应用程序的特点是可以将父视图和子视图的所有位置/属性保存为xml格式,以后可以导入

问题:现在,当在像MacBook 13”这样的小屏幕上工作时,1200x1800大小的屏幕溢出,需要滚动或缩放以适应功能。我不想要滚动功能,但需要一种方式,当我加载1200x1800大小的父视图时,它会通过保持其纵横比自动适应可用屏幕

由于子视图信息也被保存,并且可以从xml加载,所以我需要为它们提供相同的功能。我使用“addSubview”功能添加所有子视图

我认为一种解决方案是相对改变(使用宽度和高度比)所有视图相对于当前窗口宽度/高度的位置坐标,这是可行的,但有时会将坐标来回转换1到2像素(数学圆和ceil问题)

我也在父视图的drawRect中尝试过NSAffinetTransform,但没有成功。下面是代码,即使它对父视图有效,子视图呢

- (void) drawRect: (NSRect) dirtyRect {
//Just for testing using hardcoded values
    [[NSGraphicsContext currentContext] saveGraphicsState];
    NSAffineTransform *transform = [[NSAffineTransform alloc] init];
    [transform translateXBy:100 yBy:100];
    [transform scaleBy:-2.0];
    [transform set];
    [[NSGraphicsContext currentContext] restoreGraphicsState];
}
自动调整大小在这里也不起作用

因此,我只希望所有视图都能适应当前可用空间并保持其位置。过去一周来,我一直在努力解决这个问题,但没有解决方案。我是否遗漏了什么或做错了什么。我认为一定有一些好方法来处理它,但无法解决它


请帮忙。

经过大量研究,我找到了使用
[myview scaleUnitSquareToSize:mysize]的解决方案;


它工作得很好。

有人能帮忙吗?