【问题标题】:NSView Scale To Fit itself along with child viewsNSView Scale To Fit 自身以及子视图
【发布时间】:2014-07-31 03:20:01
【问题描述】:

我有可以有任意数量的子 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];
}

自动调整大小在这里也不起作用。

所以我只希望所有视图都适合当前可用空间并保持其位置。从过去的一周开始,我一直在努力解决这个问题,但没有解决方案。我有什么遗漏或做错了吗。我想一定有什么好办法可以处理但又搞不明白。

请帮忙。

【问题讨论】:

  • 有人可以帮忙吗?

标签: objective-c macos cocoa nsview nswindow


【解决方案1】:

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

效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多