Я пытаюсь объединить несколько рисунков UIBezierPath; У меня есть разные типы рисунков, которые я могу сделать (линия, кубический безье, квадратичные безье), и каждый из них может быть заполнен или незаполнен. Я выбираю тип рисунка случайным образом, и моя цель состоит в том, чтобы сделать 3 разных рисунка, которые связаны в точке; поэтому, когда заканчиваются первые, скажем, линейные чертежи, второй путь - может быть кубическим безьером; где это заканчивается, третий, может быть заполненным чертежом линии начинается. У меня есть квадрат UIView, который я пытаюсь нарисовать; и каждый путь должен иметь свою часть UIView - первую 1/3, вторую и третью. Смогу ли я создать это с одним объектом UIBezierPath, или мне нужно создать 3 разных? Как заставить их закончить работу и начать в одном месте? есть ли способ сделать это с помощью подпапок?Как я могу объединить чертежи uibezierpath?
ответ
UIBezierPath имеет свои методы экземпляра, такие как (DOC)
-addLineToPoint:
-addArcWithCenter:radius:startAngle:endAngle:clockwise:
-addCurveToPoint:controlPoint1:controlPoint2:
-addQuadCurveToPoint:controlPoint:
-appendPath:
Вы можете комбинировать пути по одному. Когда вы закончите, используйте -closePath
, чтобы закрыть путь.
Не стесняйтесь взглянуть на мою открытую библиотеку lib, которая называется UIBezierPath-Symbol. ;)
И если вы хотите больше настроить рисунок путь, я рекомендую CGMutablePath
. Вы можете создать каждый путь настолько сложным, насколько хотите (вы можете комбинировать простые пути по методам CGPathAdd...
). Наконец, используйте CGPathAddPath()
, чтобы объединить их.
void CGPathAddPath (
CGMutablePathRef path1, // The mutable path to change.
const CGAffineTransform *m, // A pointer to an affine transformation matrix, or NULL if no transformation is needed. If > specified, Quartz applies the transformation to path2 before it is added to path1.
CGPathRef path2 // The path to add.
);
UIBezierPath - это всего лишь обертка для CGPath, которая сама по себе представляет собой набор инструкций для рисования (штрихом или заполнением или обоими). Этот рисунок может иметь место где угодно. Другими словами, UIBezierPath - это просто инструмент для рисования; Важная вещь сам рисунок. Учитывая графический контекст (который может быть UIView, UIImage, CALayer и т. Д.), Вы можете делать столько рисунков, сколько хотите, например, строка, затем кубический безье, затем заполненный чертеж линии. Но как вы выполняете эти чертежные биты, полностью зависит от вас. Вы не должны делать уход, независимо от того, выполняете ли вы это с тремя UIBezierPaths, одним UIBezierPath, несколькими путями, одним путем, подпутами, любыми (или даже копируя другие рисунки в этот) - конечный эффект - это все, что имеет значение, т.е. накопленный рисунок в конечном итоге выполнен в этом графическом контексте.
Ваш вопрос: «Должен ли я нарисовать этот круг правой рукой или левой рукой, и я должен нарисовать ее против часовой стрелки или по часовой стрелке?» Это не имеет значения. Как только это будет сделано, то, что будет нарисовано, - это круг; вот что важно.
И если проблема только, что вы на самом деле не знаю, как * * рисовать, моя книга объясняет это: HTTP : // WWW.apeth.com/iOSBook/ch15.html#_graphics_context_settings – matt