【发布时间】:2015-08-22 21:55:37
【问题描述】:
为了解决我的最后一个问题:Draw/Paint like sketch color inside a bezier path in 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 和这个遮罩有同样的作用,即让我只在路径内绘制,我现在面临的问题是:它对在路径边界周围的触摸点上绘制产生不好的影响!
【问题讨论】:
-
如果您不将剪贴蒙版应用到图层,那么您只会看到它在贝塞尔曲线内绘制。见stackoverflow.com/questions/20410146/…
-
我都试过了。这个问题是一样的,边界周围的颜色仍然感觉像流动,但不是在外面,从里面流出路径的边界。问题是触摸时绘制点,掩蔽不是问题。
-
关闭抗锯齿也一样吗?
-
是的,我试过了:CGContextSetShouldAntialias(context, NO); CGContextSetAllowsAntialiasing(上下文,否);但这也无济于事!
标签: ios objective-c uiview core-graphics calayer