Предыдущие ответы дали вам прямоугольники, но вы говорите, что они делают не то, что вы хотите, но не то, почему они не правы ... Так что я угадаю, на случай, если я угадаю правильно:
Я предполагаю, что у вас есть прямоугольник, и вы хотите переместить один из его углов, как при перетаскивании по клику в графической программе. Далее, исходя из вашего примера кода, я предполагаю, что стороны прямоугольника параллельны осям.
В этом сценарии точка, диагонально противоположная той, которую вы перемещаете, является якорем - она остается на месте. Тот, который вы двигаете, очевидно, перемещается, а два других двигаются, чтобы сохранить форму прямоугольной.
Если это так, то вы рассчитываете прямоугольник, основываясь исключительно на точке, которую вы перемещаете, и на ее противоположной по диагонали точке. Код, который вы даете в своем вопросе, обрабатывает случай перемещения точки1 или точки3. Вам просто нужен код для случая, когда точка2 или точка4 перемещены, и вы получите простую подстановку:
NSMakeRect( MIN(point2.x, point4.x),
MIN(point2.y, point4.y),
fabs(point2.x - point4.x),
fabs(point2.y - point4.y));
Теперь вам просто нужно знать, в какую точку вы переместились, и выбрать соответствующий код.