CGContext & CGMutablePath 画线 但是被颠倒了

CGContext & CGMutablePath drawing line But it's be reversed

我使用 CgContext 和 CGMutablePath 来绘制对象,但绘制的图像是颠倒的。 我需要Draw Object转CoreMl绘图分类工程

我使用 Touches 事件来绘制对象 但是当我画到顶部方向时,如果将是底部方向。 我希望线路方向正确

学习link

func drawContextLine(from fromPoint: CGPoint, to toPoint:CGPoint) ->CGImage?{

        let grayscale = CGColorSpaceCreateDeviceGray()
        if contextDraw == nil{
            contextDraw = CGContext(
            data:nil, width:256, height:256, bitsPerComponent:8, bytesPerRow:0,
            space:grayscale, bitmapInfo:CGImageAlphaInfo.none.rawValue)
        }

        //        intermediate_bitmap_context?.setStrokeColor(
        //            red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        contextDraw?.setStrokeColor(UIColor.white.cgColor)

        let path = CGMutablePath()
        path.move(to: fromPoint)
        path.addLine(to: toPoint)

        contextDraw?.setLineWidth(5.0)
        contextDraw?.beginPath()
        contextDraw?.addPath(path)
        contextDraw?.strokePath()

        guard let imgCg = contextDraw?.makeImage() else {
            return nil
        }
        imgViewPridict.image = UIImage.init(cgImage: imgCg)
        return contextDraw?.makeImage()

    }

触摸开始

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
          if let touch = touches.first{
              lastPoint = touch.location(in: self.view)

          }
    }

触摸移动

   override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard touches.first != nil else {
            return
        }
        if let touch = touches.first {

            let currentPoint = touch.location(in: self.view)
            drawLine(from: lastPoint, to: currentPoint)
            drawContextLine(from: lastPoint, to: currentPoint)
            lastPoint = currentPoint
        }
    }

试试下面的代码片段。

func drawContextLine(from fromPoint: CGPoint, to toPoint:CGPoint) ->CGImage?{

        let grayscale = CGColorSpaceCreateDeviceGray()
        if contextDraw == nil{
            contextDraw = CGContext(
            data:nil, width:256, height:256, bitsPerComponent:8, bytesPerRow:0,
            space:grayscale, bitmapInfo:CGImageAlphaInfo.none.rawValue)
        }

        contextDraw?.setStrokeColor(UIColor.white.cgColor)

        contextDraw?.saveGState()
        contextDraw?.translateBy(x: 0, y: CGFloat(integerLiteral: contextDraw?.height ?? 0))
        contextDraw?.scaleBy(x: 1.0, y: -1.0)

        contextDraw?.setLineWidth(5.0)
        contextDraw?.move(to: CGPoint(x: 100, y: 100))
        contextDraw?.addLine(to: CGPoint(x: 150, y: 150))
        contextDraw?.strokePath()

        contextDraw?.restoreGState()

        guard let imgCg = contextDraw?.makeImage() else {
            return nil
        }
        imgViewPridict.image = UIImage.init(cgImage: imgCg)
        return contextDraw?.makeImage()

    }

您可能需要通过对其应用 AffineTransform 来反转在 cgContext 上绘制的内容。