检测同一NSView中两个对象的接近程度

时间:2010-08-11 00:10:47

标签: cocoa nsview

我正在制作一个绘图程序,并试图找出模仿Omnigraffle等应用程序中的“磁铁”行为的最佳方法。这个想法是:当两个对象(屏幕上的可视对象,而不是OOP对象)之间绘制一条线时,当第一个对象的线接近第二个时,第二个上的“磁铁”或“节点”将突出显示或第二个对象将突出显示。

我希望将所有屏幕上的对象保留在一个数组中,然后使用通知将该数组发送到该行的末尾位置。这样,我可以让每个对象做自己的比较并说“嘿,我有一个节点靠近线,我想我会照亮它”。

我还想知道,如果我想要两个物体,例如盒子,当它们彼此接近时会并排在一起,它是否会采用相同的方法。这样,就可以在相同的X或Y坐标上排列框

我并不关心突出显示或将线条捕捉到节点的位置,我只是想知道实现此问题的“边缘接近检测”部分的最佳方法。

1 个答案:

答案 0 :(得分:0)

如果您使用的是CGRect类型,我建议您使用两个函数CGRectInset()CGRectIntersectsRect()

使用CGRectInset()展开其中一个或两个版本,然后使用CGRectIntersectsRect()查看您是否匹配。您也可以在原始版本上使用(同时)CGRectIntersectsRect(),以确定已经接近并且没有相互遮盖。