2015-06-08 2 views
7

Чтобы разобраться со своей последней проблемой: Draw/Paint like sketch color inside a bezier path in UIView, я взял точное изображение (пути), заполненное выбранным цветом. Затем, чтобы сделать что UIView для контекста цвета я взял:Рисование в UIView на сенсорных точках дает эффект рисования размытия на границах

lineColor=[UIColor colorWithPatternImage:img]; 

в DrawRect:

CGPoint mid1 = midPoint(previousPoint1, previousPoint2); 
CGPoint mid2 = midPoint(currentPoint, previousPoint1); 
[curImage drawInRect:CGRectZero]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[self.layer renderInContext:context]; 
CGContextMoveToPoint(context, mid1.x, mid1.y); 
CGContextAddQuadCurveToPoint(context, 
          previousPoint1.x, 
          previousPoint1.y, 
          mid2.x, 
          mid2.y); 
CGContextSetLineCap(context, kCGLineCapRound); 
CGContextSetBlendMode(context, kCGBlendModeCopy); 
CGContextSetLineJoin(context, kCGLineJoinRound); 
CGContextSetLineWidth(context, self.lineWidth); 
CGContextSetStrokeColorWithColor(context,lineColor.CGColor); 
CGContextSetShouldAntialias(context, YES); 
CGContextSetAllowsAntialiasing(context, YES); 
CGContextSetFlatness(context,0.5); 
CGContextSetAlpha(context, 1.0); 
CGContextStrokePath(context); 

Он рисует именно на пути зрения, но на границах цвет выходит как тающий эффект.

Источник изображения, в которой цвет должен быть заполнен: Image to be filled with color

изображение, которое будет использоваться в качестве colorWithPatternImage (IMG) enter image description here

После нанесения на прикосновения, resultimg Изображение: enter image description here

Что утра Я пропустил здесь, чтобы заполнить его отлично? Любая помощь с основной графикой наиболее приветствуется! Спасибо!

Чтобы скрыть изображение я сделал:

-(void)clipView :(MyUIBezierPath*)path drawingView:(DrawingView*)myView 
{ 
    MyUIBezierPath *myClippingPath =path; 
    CAShapeLayer *mask = [CAShapeLayer layer]; 
    mask.path = myClippingPath.CGPath; 
    myView.layer.mask = mask; 
} 

Но colorWithPatternImage и эта маскировка делает то же трюк, т.е. позволяет мне рисовать только внутри пути, проблема я столкнулся сейчас: Это дает плохой эффект на рисование точек касания вокруг границ пути!

+0

Если вы не применяете обтравочную маску к слою, так что вы видите только ее рисование внутри безье. См. Http://stackoverflow.com/questions/20410146/use-bezier-path-as-clipping-mask –

+0

Я пробовал все это готово. Это же проблема с этим, цвет вокруг границы по-прежнему кажется текущим, а не снаружи , изнутри он течет от границы пути. Проблема заключается в рисовании в точках касания, маскировка - не проблема. –

+0

То же самое с анти-алиасом? –

ответ

1

Ну, его работа с моим собственным способом маскировки с помощью colorWithPatternImage, хотя и маскировка его путем отсечения - это то же самое. Проблема с расширением была из-за того, что изображение было нарисовано в точке касания в методе «calculateMinImageArea: CGPoint1: CGPoint2: CGPoint3». Изменение его размеров (ширина по ширине по ширине) сортирует его.

0

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

+0

Создать путь, из которого изображение? –

+0

исходное изображение, которое вы разместили первым. – CodenameLambda1

+0

У меня уже есть путь, который хранится, и только с этим я получаю второе изображение. Озабоченность заключается в непрерывном вызове прикосновений, перемещаемых по границам, цвет начинает течь. См. Мой связанный вопрос, чтобы посмотреть, как я рисую его в drawRect. –