0

この「奇妙な」問題について助けを求めています。

PanGesture を使用して、ユーザーが線を引くことができるようにしていますCAShapeLayer

パスが終了するまでパスを追跡し、パスをパスの配列に保存して、元のパスをパスからクリアします。CAShapeLayer.path

これらのパスを に再描画するUIImageと、パスがY-axis画面の上部に向かって移動します。

私は2つの画像を添付しています:

1) パスの描画。道を描く

2) パスを再描画したときに出力される UIImage。ご覧のとおり、グリッド ラインに沿って描画しますが、UIImage が作成されると、ラインはグリッド ラインの上にあります。UIImage で再描画されたパス

任意の提案をいただければ幸いです。

描画とレンダリングの両方のコードを以下に示します。

    @objc private func drawLine(_ gestureRecognizer: UIPanGestureRecognizer) {

    let point = gestureRecognizer.location(in: self)
    if point.x < 0 || point.x > self.bounds.width || point.y < 0 || point.y > self.bounds.height {
      return
    }

    switch gestureRecognizer.state {
    case .began:
      currentLine = UIBezierPath()
      currentLine.lineWidth = settings.defaultSpotRadius
      currentLine.lineCapStyle = .round
      currentLine.lineJoinStyle = .round
      currentLine.move(to: point)
      break

    case .changed:
      currentLine.addLine(to: point)
      currentLineDrawLayer.path = currentLine.cgPath
      break

    case .ended:
      self.storage.addLine(clear: fowClearMode, path: currentLine, ofWidth: currentLine.lineWidth)
      currentLineDrawLayer.path = nil
      storedImage = drawPaths()
      break

    default:
      break
    }

  }

  public func drawPaths() -> UIImage? {
    if pathsHidden { return nil }

    let rect = CGRect(origin: .zero, size: self.imageSize)
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)

    storedImage.draw(in: rect)

    for (isClear, line, width) in thePaths {
      let blendMode = isClear ? settings.colorClear : settings.colorDark
      line.lineWidth = width
      line.stroke(with: blendMode, alpha: 1.0)
    }

    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    return image
  }

2018年09月25日(火)

インポートの断片のみを含むミニ プロジェクトを作成しました。ここで入手できます...ミニプロジェクト

4

1 に答える 1