我有NSView(父),可以有任意数量的孩子NSView' s。用户使用按钮添加新视图,例如添加图像/背景视图等。一般来说,父视图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和#34;这样的小屏幕时,1200x1800尺寸溢出,并且需要滚动或缩放以适应功能。我不想要滚动功能,但需要一种方法,当我加载1200x1800大小的父视图时,它会自动适应可用屏幕,保持它的宽高比。
由于子视图信息也已保存,可以从xml加载,因此我需要相同的功能。我使用" addSubview"添加所有子视图特征。
我认为一种解决方案是相对于窗口的当前宽度/高度相对改变(使用宽度和高度比)所有视图的位置坐标,并且它的工作类型但是有时间来回转换坐标松散1到2个像素(数学轮和细胞问题)。
我也在父视图的drawRect中尝试过NSAffineTransform,但是没有用。下面是代码,即使它适用于父级的子视图呢?
- (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];
}
自动调整大小也不起作用。
所以我只希望所有视图都适合当前可用空间并保持其位置。过去一周我一直在努力解决这个问题,但没有解决方案。有什么我错过或做错了。我认为必须有一些好的方法来处理它,但无法弄明白。
请帮忙。
答案 0 :(得分:0)
经过大量研究后,我使用[myview scaleUnitSquareToSize:mysize];
效果很好。