Я пытаюсь создать обтравочный контур в форме знака плюса, так что последующие пути, которые я рисую в одном контексте, удалены этой частью. Я создаю обтравочный контур, используя два пути прямоугольника, наложенные друг на друга.iOS - Объединение двух путей с помощью UIBezierPath appendPath
Это то, что я хотел бы окончательный рисунок, чтобы выглядеть, когда я впоследствии нарисовать круг:
ххх | XXX
XXXX | | XXXX
XXXXX | | XXXXX
--- ---
--- ---
XXXXX | | XXXXX
XXXX | | XXXX
ххх | | икс
Однако, на самом деле выглядит следующим образом:
ххх | XXX
XXXX | | XXXX
XXXXX | | XXXXX
--- XX ---
--- XX ---
XXXXX | | XXXXX
XXXX | | XXXX
ххх | | XXx
Если я правильно прочитал это поведение, пересечение двух путей прямоугольника не является частью обтравочной маски.
Кажется (что неудивительно), что appendPath не создает единый путь из моих двух путей прямоугольника в этом случае - я предполагаю, что я ничего не могу с этим поделать. Кроме того, у Core Graphics нет никаких функций, относящихся к объединениям каналов и т. Д.
Кто-нибудь может понять, что я могу сделать? Я включил соответствующий фрагмент кода.
Рисование знака плюс одним путем не является решением, так как я хочу добавить другие перекрывающиеся пути к моей обтравочной маске.
CGContextSaveGState(context);
// create clipping path
UIBezierPath *clippingPath = [UIBezierPath bezierPath];
clippingPath = [UIBezierPath bezierPathWithRect:CGRectMake(centrePoint.x - 2.0f, 0.0f, 4.0f, self.sizeY)];
[clippingPath appendPath:[UIBezierPath bezierPathWithRect:CGRectMake(0.0f, centrePoint.y - 2.0f, self.sizeX, 4.0f)]];
// use the clipping path to create a hole in the context
CGContextAddPath(context, clippingPath.CGPath);
CGRect boundingRect = CGContextGetClipBoundingBox(context);
CGContextAddRect(context, boundingRect);
CGContextEOClip(context);
// draw the icon shape (clipped portion is removed)
iconBezierPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(self.sizeX/3.0f, self.sizeY/2.25f, self.sizeX/3.0f, self.sizeX/3.0f)];
[highlightColor setFill];
[iconBezierPath fill];
CGContextRestoreGState(context);
Великий - CGRectIntersection было то, что мне не хватало. благодаря –