2011-01-25 2 views
2

Я могу комбинировать rect1 с rect2 с помощью CGRectUnion() и получить комбинированный прямоугольный тон.Что было бы наоборот CGRectUnion()?

Можно ли вычесть rect1 из rect3 (который содержит rect1) и получить оставшуюся часть прямоугольника?

+3

'CGRectUnion()' на самом деле не делает истинного объединения прямоугольников, он просто возвращает наименьший прямоугольник, который полностью содержит оба исходных прямоугольника. Какой тип результата вы ожидаете? Я сомневаюсь, что вычитание в большинстве случаев обеспечило бы прямоугольник. –

+0

Близко связанный: [Вычесть CGRect из CGRect - самый большой кусок, не содержащий другого] (http://stackoverflow.com/q/4811623). Основываясь на диаграммах, выбранное определение состоит в том, что результат является субпрайклом первого, который не пересекает второй. Конечно, это не вычитание, но это может быть полезно. –

ответ

3

Как сказал Брэд Ларсон, вы не можете сделать это в кварце, так как функции CGRect работать с ничего, кроме прямоугольников и их составных частей (точки, размеры, и отдельные номера).

Если вы программировали Mac, я бы предложил использовать другой API под названием HIShape. Это современный преемник QuickDraw Regions, и, таким образом, он способен к непрямоугольным формам. К сожалению, хотя HIShape по-прежнему доступен в 64-разрядной Mac OS X, он недоступен в iOS.

Если вам действительно нужно что-то подобное, вам придется написать его самостоятельно, в том числе свой собственный класс типа не обязательно обязательно прямоугольной формы HIShape.

1

Попробуйте CGRectIntersection, если я правильно понял вас.

+0

'CGRectIntersection' возвращает пересечение двух прямоугольников. То, что он просил, - это если есть способ вычесть один прямоугольник из другого. 'originalRect - CGRectIntersection (originalRect, otherRect)' – Andy

0

ну, это зависит ... от того, как rect3 содержит rect1 ... Я имею в виду, может получиться, что результирующая область больше не является прямым ... например, если rect1 находится внутри rect3, остальные область не является прямой, поэтому вы не можете использовать объект CGRect. Вы можете получить прямоугольник на всякий случай, если rect3 и rect1 полностью разделяют сторону и имеют ее (все это). Так что мне нужно знать, какой объект вы хотите получить с помощью этого вычитания ... Может ли это быть новым изображением с двумя разными областями? или разрезать область резания больше CGrect (верхний прямоугольник, левый, биттон, правый ...) Что вы собираетесь делать с результатом «объекта»?

Luca

Смежные вопросы