2014-02-14 8 views
1

Я использую следующий код, чтобы сделать ввод данных пользователя в моем основном нанесении краски:Кварц интерполяция идет шаткий при определенной ширине линий

CGContextRef drawSpace = CGLayerGetContext(currentLayer); 

CGContextBeginPath(drawSpace); 

CGContextMoveToPoint(drawSpace, [[self.currentStroke objectAtIndex:0]pointValue].x, [[self.currentStroke objectAtIndex:0]pointValue].y); 

for (NSValue *v in self.currentStroke) { 
    CGContextAddLineToPoint(drawSpace, [v pointValue].x ,[v pointValue].y); 
    /* CGContextMoveToPoint(drawSpace, [v pointValue].x ,[v pointValue].y); 
The link I got only showed this called when index = 0, so I dummied it out. Left in, 
it produces the original jagged image behavior */ 
} 


CGContextClosePath(drawSpace); 
CGContextSetStrokeColorWithColor(drawSpace, [[NSColor blackColor]CGColor]); 
CGContextSetLineWidth(drawSpace, self.BrushSize); //Sets the brush size 
CGContextStrokePath(drawSpace); //Strokes the path to the layer 

, который работает отлично на малую ширине линии, но при больших размерах изображение получается как рисунок ниже. Я знаю, что это связано с углами, но я понятия не имею, как исправить эту проблему. Кто-нибудь знает, как я могу получить чистый удар любого размера?

My drawing

ответ

1

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

Что вы должны сделать, это выполнить штрих линии только после завершения рисования всех сегментов. В этом случае время выполнения будет заботиться о углах для вас.

См. Также this question для получения дополнительной информации о том, как его реализовать.

+0

Звучит неплохо, но что показывать, пока пользователь рисует мышью? – PopKernel

+0

Ну, если бы я был вами, я бы сохранил точки, которые пользователь нарисовал одним ударом, и перетягивать всю линию каждый раз, когда движется мышь. Это должно дать вам результат, который вы пожелаете. – insys

+0

Я пробовал это, но он не работает. Может быть, я делаю это неправильно? Я собираюсь обновить вопрос ... – PopKernel