菜鸟教程小白 发表于 2022-12-13 07:44:43

ios - 在 UIView 中的贝塞尔路径内绘制/绘制草图颜色


                                            <p><p>我正在 UIView 上的 UIBezier 路径的帮助下绘制形状层:</p>

<pre><code>    CAShapeLayer *pathLayer = ;
    pathLayer.frame=CGRectMake(-view.frame.origin.x, -view.frame.origin.y, view.frame.size.width, view.frame.size.height);
    pathLayer.path = path.CGPath;
    pathLayer.strokeColor = [ CGColor];
    pathLayer.fillColor = [ CGColor];
    //pathLayer.fillColor = nil;
    pathLayer.lineWidth = 6.0;
    pathLayer.lineJoin = kCALineJoinBevel;
    ;
</code></pre>

<p>在我想在那个 UIView 上绘制的接触点上,我正在这样做:</p>

<pre><code>-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
      UITouch *touch=;
      CGPoint touchBeganPoint;
      touchBeganPoint=;
      actionString=@&#34;drawPencil&#34;;
      previousPoint1 = ;
      previousPoint2 = ;
      currentPoint = ;
      ;
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
      UITouch *touch = ;
      previousPoint2= previousPoint1;
      previousPoint1= currentPoint;
      currentPoint    = ;
      ;
}

CGPoint midPoint(CGPoint p1, CGPoint p2) //helper function
{
    return CGPointMake((p1.x + p2.x) * 0.5, (p1.y + p2.y) * 0.5);
}

- (void)calculateMinImageArea:(CGPoint)pp1 :(CGPoint)pp2 :(CGPoint)cp
{
      // calculate mid point
      CGPoint mid1    = midPoint(pp1, pp2);
      CGPoint mid2    = midPoint(cp, pp1);

      CGMutablePathRef path = CGPathCreateMutable();
      CGPathMoveToPoint(path, NULL, mid1.x, mid1.y);
      CGPathAddQuadCurveToPoint(path, NULL, pp1.x, pp1.y, mid2.x, mid2.y);
      CGRect bounds = CGPathGetBoundingBox(path);
      CGPathRelease(path);

      CGRect drawBox = bounds;

      //Pad our values so the bounding box respects our line width
      drawBox.origin.x      -= 20 * 1.5;
      drawBox.origin.y      -= 20 * 1.5;
      drawBox.size.width      += 20 * 2.5;
      drawBox.size.height   += 20 * 2.5;

      UIGraphicsBeginImageContextWithOptions(drawBox.size, NO, 0);
      ;
      curImage = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();

      // generate the if conditionover here and than check and draw over paths
      ;
      [ runMode:NSRunLoopCommonModes beforeDate: ];
}

-(void)drawRect:(CGRect)rect
{
      CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
      CGPoint mid2 = midPoint(currentPoint, previousPoint1);
      ;
      CGContextRef context = UIGraphicsGetCurrentContext();
      CALayer *layer=;
      ;
      CGContextMoveToPoint(context, mid1.x, mid1.y);
      CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
      CGContextSetLineCap(context, kCGLineCapRound);
      CGContextSetBlendMode(context, kCGBlendModeNormal);
      CGContextSetLineJoin(context, kCGLineJoinRound);
      CGContextSetLineWidth(context, 20);
      CGContextSetStrokeColorWithColor(context,.CGColor);
      CGContextSetShouldAntialias(context, YES);
      CGContextSetAllowsAntialiasing(context, YES);
      CGContextSetFlatness(context, 1.f);
      CGContextSetAlpha(context,1.0);
      CGContextStrokePath(context);
      ;
}
</code></pre>

<p>现在当我在 self.layer 上绘图时,它仍然会影响添加的子层(形状层)。我只想在这条路径内绘制,不能使用 ,如绘制矩形,我正在绘制的图像有一定的宽度,有时会穿过路径或干扰其笔画。</p>

<p>实现此目的的一种方法是使用其子层(CAShapelayer)剪辑 UIView,然后在 uiview 上再次绘制它(这将清除形状图层区域之外的背景)。但是找不到如何使用 CAShapeLayer 剪辑它。 </p>

<p>任何关于如何顺利实现这一目标的建议或见解都可能会有很大帮助。
谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>拍摄另一张图像,该图像是具有所需路径的 View 快照,并填充了选定的颜色。
比触摸移动称为 drawrect 具有相同的代码,除了 作为上下文的颜色有一点异常(exception)。
<a href="https://stackoverflow.com/questions/30709045/drawing-in-uiview-with-drawrect-on-touch-points-gives-blurr-drawing-effect-on-bo" rel="noreferrer noopener nofollow">Drawing in UIView on touch points gives blurr drawing effect on boundaries</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 UIView 中的贝塞尔路径内绘制/绘制草图颜色,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30658974/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30658974/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 UIView 中的贝塞尔路径内绘制/绘制草图颜色