为了解决我上一个问题:在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);
它在视图路径中精确绘制,但在边界处,颜色会像融化效应一样溢出。
要填充颜色的源图像:
用作colorWithPatternImage(img)的图像:
在触摸上绘制后,结果图像为:
我在这里缺少什么才能完美填充它? 欢迎任何有关核心图形的帮助! 谢谢!
为了遮罩图像,我还做了以下操作:
-(void)clipView :(MyUIBezierPath*)path drawingView:(DrawingView*)myView
{
MyUIBezierPath *myClippingPath =path;
CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = myClippingPath.CGPath;
myView.layer.mask = mask;
}
但是使用colorWithPatternImage和遮罩可以实现相同的效果,即让我只在路径内绘制,但现在我面临的问题是:在路径边界附近的触摸点上绘制会产生不良效果!