我正在制作一个绘图程序,并试图找出模仿Omnigraffle等应用程序中的“磁铁”行为的最佳方法。这个想法是:当两个对象(屏幕上的可视对象,而不是OOP对象)之间绘制一条线时,当第一个对象的线接近第二个时,第二个上的“磁铁”或“节点”将突出显示或第二个对象将突出显示。
我希望将所有屏幕上的对象保留在一个数组中,然后使用通知将该数组发送到该行的末尾位置。这样,我可以让每个对象做自己的比较并说“嘿,我有一个节点靠近线,我想我会照亮它”。
我还想知道,如果我想要两个物体,例如盒子,当它们彼此接近时会并排在一起,它是否会采用相同的方法。这样,就可以在相同的X或Y坐标上排列框
我并不关心突出显示或将线条捕捉到节点的位置,我只是想知道实现此问题的“边缘接近检测”部分的最佳方法。
答案 0 :(得分:0)
如果您使用的是CGRect
类型,我建议您使用两个函数CGRectInset()
和CGRectIntersectsRect()
使用CGRectInset()
展开其中一个或两个版本,然后使用CGRectIntersectsRect()
查看您是否匹配。您也可以在原始版本上使用(同时)CGRectIntersectsRect()
,以确定仅已经接近并且没有相互遮盖。