この「奇妙な」問題について助けを求めています。
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日(火)
インポートの断片のみを含むミニ プロジェクトを作成しました。ここで入手できます...ミニプロジェクト