UIBezierPath - вы можете "обрезать" один? - PullRequest
1 голос
/ 28 сентября 2019

Скажем, у вас есть UIBez, который вы построили:

enter image description here

Теперь я хочу "обрезать" его, возможно, с помощью этого прямоугольника:

enter image description here

Итак, в данном примере последний путь, который мне нужен, будет:

enter image description here

(Альтернативно в примере вы могли бы «вычесть» прямоугольник справа и один снизу.)

Включает ли инструментарий iOS эту возможность для построения UIBezierPath?

Я думаю, что ответ"Нет", но это одна из тех вещей, которые невозможно гуглить, потому что вы получаете не связанный QA.Поэтому я не могу найти ответ.

Примечание Pls - это полностью отличается от простого "добавления отверстия", как это обычно делают, используя .append (пример этого https://stackoverflow.com/a/57514286/294884)

1 Ответ

1 голос
/ 29 сентября 2019

Нет встроенного отсечения путей (и, конечно, также нет автоматического закрытия отсеченных путей).


Помимо упомянутой выше техники «добавления дырки», другой подход - просто ее маскирование / отсечение.И я знаю, что вы это знаете, но для будущих читателей встроенное отсечение / маскирование доступно только в графическом контексте (или mask из CALayer).Например, если у вас есть CAShapeLayer, вы можете установить его mask (например, на прямоугольник, показанный пунктирным прямоугольником ниже):

enter image description here

Очевидно, что этот подход не может «закрыть» пути, которые были обрезаны.

Однако, если ваши пути состоят из серии отрезков, вы теоретически могли бы написать свою собственную подпрограммуитерировать по этим отрезкам линии в поисках пересечений с вашей прямоугольной обтравочной маской (а также определять, содержатся ли они в обтравочной маске вообще).Если вы ищете « UIBezierPath пересечение », вы увидите несколько соответствующих примеров.Даже тогда у вас будут интересные крайние примеры того, как алгоритмически закрывать ваши пути.

...