在调整窗口大小后保持绘图的边距

时间:2009-06-20 22:56:30

标签: cocoa math graphics

我正在编写一个应用程序绘制在另一个应用程序的窗口中(这是在OS X下使用Cocoa,但问题很普遍,我希望它不会因操作系统/框架问题而陷入困境),而且我我遇到了一个似乎应该有一个简单答案的问题,但它让我绝对疯了。这是问题所在:

我在另一个应用程序窗口内绘制一个矩形,该窗口必须位于相对于窗口顶部和左侧的某个位置(即,我的矩形与目标窗口的顶部和左侧之间的边距必须保持固定)。我可以计算所需的相对x,y坐标作为窗口大小的百分比,工作正常:矩形正确显示。然而,用户然后调整窗口的大小,我可以通过使用基于新高度和宽度与旧高度和宽度的比率的变换来正确调整矩形的大小,但是我失去了相对定位:矩形的坐标现在不正确(见图片 - 这是问题的粗略模型)。

image http://img30.imageshack.us/img30/5273/resizeexample.png

现在,我无法弄清楚如何计算相对于窗口顶部和左侧的新x,y坐标。窗户不是正方形;它的调整大小受其他应用程序的约束,但宽高比宽度/高度会因某些未知函数而改变。当我以相对术语测量所需的y坐标时,百分比会在窗口调整大小时发生变化。在数字上,它看起来像这样:

调整大小之前:
窗口大小:h => 760,w => 546
矩形原点:x => 355,y => 84(例如84/546 =高度的15.3%)

调整大小后:
窗口大小:h => 1009,w => 717
矩形起源应该是:? (我可以测量它像x => 474,y => 99,但我不能预测那些值; 99/717现在= 13.8%的高度)。

我已经尝试了我能想到的两个窗口测量的每个比例;我也碰到了转换到原点,缩放,然后转换回来的想法,以避免缩放移动坐标的问题 - 但我不知道在哪里翻译回来!这可能有一些简单的几何/三角解决方案,但无论我绘制多少图表,都不会发生任何事情。我愿意接受有人指出这个问题的一线解决方案的不可避免的尴尬,如果他们能指出我在这里正确的方向!

2 个答案:

答案 0 :(得分:0)

如果您希望左侧为left单位,而左侧为top单位,请尝试将原点设为:

  

x:left
  y:window.frame.size.height - rectangle.frame.size.height - top

答案 1 :(得分:0)

对于后代:我真的不知道Apple(或其他任何人)是如何做到这一点的 - 老实说,我认为我试图与之交互的应用程序并不是用这种方式编写的,因为它远非易于访问。为了解决这个问题,我只是最终对一大堆不同的(x,y)对进行采样并构建一个线性模型来预测任意坐标的正确坐标。一点点的大锤,但它是我能想到的最好的。