首页 文章

NSView Scale适合自己和子视图

提问于
浏览
0

我有NSView(父),可以有任意数量的孩子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中尝试过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];
}

自动调整大小也不起作用 .

因此,我只希望所有视图都适合当前可用空间并保持其位置 . 过去一周我一直在努力解决这个问题,但没有解决方案 . 有什么我错过或做错了 . 我认为必须有一些好的方法来处理它,但不能弄明白 .

请帮忙 .

1 回答

  • 0

    经过大量研究后我发现使用 [myview scaleUnitSquareToSize:mysize]; 解决方案

    它运作良好 .

相关问题