我正在开发绘图应用程序。我想实现橡皮擦功能,以擦除使用UIBezierPath绘制的路径。

我已经尝试了下面的代码,但它不起作用

    UIGraphicsBeginImageContextWithOptions(self.tempImageView.frame.size, false, 0.0)
    if let context = UIGraphicsGetCurrentContext()
    {
        tempImageView.image?.draw(in: CGRect(x:
            0, y: 0, width: self.tempImageView.frame.size.width, height: self.tempImageView.frame.size.height))
        let sublayer = CAShapeLayer()
        self.tempImageView.layer.addSublayer(sublayer)
        context.setBlendMode(CGBlendMode.clear)
        sublayer.strokeColor = editorPanelView.drawingColor.cgColor
        sublayer.lineJoin = kCALineJoinRound
        sublayer.lineCap = kCALineCapRound
        sublayer.lineWidth = editorPanelView.brushWidth
        let path = UIBezierPath()
        path.move(to: CGPoint(x: mid1.x, y: mid1.y))
        path.addQuadCurve(to:CGPoint(x:mid2.x, y:mid2.y) , controlPoint: CGPoint(x: prevPoint1.x, y: prevPoint1.y))
        sublayer.path = path.cgPath
        layerArray.append(sublayer)
        UIGraphicsEndImageContext()
    }


我无法为此找到任何解决方案。任何帮助(即使只是朝着正确的方向踢)也将不胜感激。

最佳答案

CAShapeLayer是矢量图。它是形状。常用的橡皮擦工具可用于栅格(基于像素)图形。两者是不同的,并且没有直接的方法可以在矢量绘图上使用橡皮擦工具。

一种可行的方法是让橡皮擦工具编辑应用于您的形状图层的蒙版图层。这将具有擦除遮罩不透明的形状层部分的效果。

其中一个棘手的部分是,一旦您绘制了蒙版,就必须擦除蒙版的该部分,以便用户能够将新内容绘制到已擦除区域中,这可能会导致被擦除要显示的旧图的一部分。

获得您想做的事情才能很好地工作将非常棘手。

关于swift - CAShapelayer工程图的橡皮擦功能:SWIFT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51599020/

10-10 20:11