나는 드로잉 프로그램을 작업 중이며 Omnigraffle과 같은 애플리케이션에서 발견되는 '자석'동작을 모방하는 가장 좋은 방법을 찾아 내려하고 있습니다. 아이디어는 다음과 같습니다. 첫 번째 객체의 선이 두 번째 객체에 접근 할 때 두 객체 (객체의 객체가 아닌 화면의 시각 객체) 사이에 선이 그려 지므로 두 번째 객체의 '자석'또는 '노드'가 강조 표시되거나 두 번째 객체 개체가 강조 표시됩니다.동일한 NSView에서 두 객체의 근접 검출
모든 화면 개체를 배열에 유지하고 알림을 사용하여 해당 배열에 행 끝의 위치를 전송하려고합니다. 이렇게하면 각 객체가 자체 비교를 수행 할 수 있고 "이봐, 나는 노드가 선 근처에있어 내가 밝힐 것"이라고 말할 수있다.
예를 들어 상자 같은 두 개의 객체가 서로 인접 해있을 때 함께 나란히 놓여 지길 원한다면 동일한 접근 방식이 될지 궁금합니다. 이렇게하면 동일한 X 또는 Y 좌표로 상자를 정렬 할 수 있습니다.
강조 표시가 걱정되거나 노드의 위치에 줄을 맞추지 않아도됩니다. 이 문제의 '가장자리 근접 감지'부분을 구현하는 가장 좋은 방법입니다.
올바르게 이해했다면 배열의 각 개체에서 CGRect를 가져 와서 CGRectInset()을 사용하여 더 큰 CGRect를 만든 다음 각 새 CGRect에서 CGRectIntersectsRect()를 호출하고 YES를 반환하는 CGRectIntersectsRect()를 호출하여 몇 가지 작업을 수행했습니다. 배열을 사용하여 객체를 포함하려는 생각이 가장 효율적입니다. – noizetoys
@noizetoys 예, 더 많거나 적습니다. 한 객체 만 움직이면 직사각형을 취하고 CGRectInset으로 그 객체를 더 크게 만들 수 있습니다. 그런 다음 다른 모든 객체를 rect로 테스트합니다. – epatel