Основная графика - Швы показывают по диагонали соединенные стороны - PullRequest
2 голосов
/ 20 марта 2012

У меня проблема в Core Graphics, где две фигуры, которые должны совмещаться, показывают швы между ними, когда их стороны диагонали. Это вызывает проблемы. Я могу исправить это, перекрыв фигуры. Это работает для простых вещей, но когда форма становится более сложной, вещи начинают разваливаться.

Вот простой пример:

[[UIColor blackColor] setFill];
[path fill]; //fills the entire background black

UIBezierPath *path1 = [UIBezierPath bezierPath];
[path1 moveToPoint:CGPointMake(0.0f, 0.0f)];
[path1 addLineToPoint:CGPointMake(100, 0.0f)];
[path1 addLineToPoint:CGPointMake(50, rect.size.height)];
[path1 addLineToPoint:CGPointMake(0, rect.size.height)];
[path1 closePath];
UIBezierPath *path2 = [UIBezierPath bezierPath];
[path2 moveToPoint:CGPointMake(100, 0)];
[path2 addLineToPoint:CGPointMake(rect.size.width, 0)];
[path2 addLineToPoint:CGPointMake(rect.size.width, rect.size.height)];
[path2 addLineToPoint:CGPointMake(50, rect.size.height)];
[path2 closePath];
[[UIColor lightGrayColor] setFill];
[path1 fill];
[path2 fill];

Это создает шов, который выглядит примерно так: ScreenShot of seam

Это исключительно проблематично, потому что это происходит в CGPathApply функции обратного вызова, которую я использую для обработки фигур (я делю фигуры, выполняю некоторую обработку и снова соединяю их). Из-за этого очень трудно определить, как эти формы должны быть смещены таким образом, чтобы удалить швы (путем наложения) без искажения формы. Тем более, что некоторые из этих форм довольно сложны (не простые тазы).

Я обнаружил, что отключение сглаживания (CGContextSetShouldAntialias(context, NO);) действительно убирает кажущиеся вещи, но все становится ужасно, если я так делаю, так что на самом деле это не вариант.

Есть идеи?

...