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