Рисовать / рисовать, как цвет эскиза внутри безье пути в UIView

Я рисую слой формы с помощью UIBezier Path на UIView:

    CAShapeLayer *pathLayer = [CAShapeLayer layer];
    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 = [[UIColor blackColor] CGColor];
    pathLayer.fillColor = [[UIColor clearColor] CGColor];
    //pathLayer.fillColor = nil;
    pathLayer.lineWidth = 6.0;
    pathLayer.lineJoin = kCALineJoinBevel;
    [view.layer addSublayer:pathLayer];

В точках касания я хочу нарисовать этот UIView, для этого я делаю:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
      UITouch *touch=[touches anyObject];
      CGPoint touchBeganPoint;
      touchBeganPoint=[touch locationInView:self];
      actionString=@"drawPencil";
      previousPoint1 = [touch locationInView:self];
      previousPoint2 = [touch locationInView:self];
      currentPoint = [touch locationInView:self];
      [self touchesMoved:touches withEvent:event];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
      UITouch *touch = [touches anyObject];
      previousPoint2  = previousPoint1;
      previousPoint1  = currentPoint;
      currentPoint    = [touch locationInView:self];
      [self calculateMinImageArea:previousPoint1 :previousPoint2 :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);
      [self.layer renderInContext:UIGraphicsGetCurrentContext()];
      curImage = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();

      // generate the if conditionover here and than check and draw over paths
      [self setNeedsDisplayInRect:drawBox];
      [[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate: [NSDate date]];
}

-(void)drawRect:(CGRect)rect
{
      CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
      CGPoint mid2 = midPoint(currentPoint, previousPoint1);
      [curImage drawAtPoint:CGPointMake(0, 0)];
      CGContextRef context = UIGraphicsGetCurrentContext();
      CALayer *layer=[self.layer.sublayers objectAtIndex:0];
      [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, kCGBlendModeNormal);
      CGContextSetLineJoin(context, kCGLineJoinRound);
      CGContextSetLineWidth(context, 20);
      CGContextSetStrokeColorWithColor(context,[UIColor redColor].CGColor);
      CGContextSetShouldAntialias(context, YES);
      CGContextSetAllowsAntialiasing(context, YES);
      CGContextSetFlatness(context, 1.f);
      CGContextSetAlpha(context,1.0);
      CGContextStrokePath(context);
      [super drawRect:rect];
}

Теперь, когда я рисую на self.layer, он все еще влияет на добавленный подслой (слой формы). Я хочу рисовать только внутри этого пути. рисунок имеет некоторую ширину и иногда пересекает путь или нарушает его ход.

Один из способов добиться этого - обрезать UIView с его подслоем (CAShapelayer) и, таким образом, снова нарисовать его в uiview (это очистит фон от области слоя формы). Но не могу найти, как обрезать его с помощью CAShapeLayer.

Любые предложения или идеи о том, как этого добиться гладко, могут быть очень полезны. Благодарю вас !

Ответы на вопрос(1)

Ваш ответ на вопрос