45 lines
1.6 KiB
Swift
45 lines
1.6 KiB
Swift
import SwiftUI
|
|
import PencilKit
|
|
|
|
struct LeadSignatureCanvas: UIViewRepresentable {
|
|
@Binding var drawing: PKDrawing
|
|
@Environment(\.colorScheme) private var colorScheme
|
|
|
|
func makeUIView(context: Context) -> PKCanvasView {
|
|
let view = PKCanvasView()
|
|
view.delegate = context.coordinator
|
|
view.drawingPolicy = .anyInput
|
|
// PencilKit renders black ink as white in Dark Mode, including existing strokes.
|
|
// Keep the stored ink black; the PDF service exports onto a white document.
|
|
view.tool = PKInkingTool(.pen, color: .black, width: 2)
|
|
view.overrideUserInterfaceStyle = colorScheme == .dark ? .dark : .light
|
|
view.backgroundColor = .clear
|
|
view.isOpaque = false
|
|
view.isScrollEnabled = false
|
|
view.drawing = drawing
|
|
view.accessibilityLabel = "Unterschrift"
|
|
view.accessibilityHint = "Mit Finger oder Apple Pencil unterschreiben"
|
|
return view
|
|
}
|
|
|
|
func updateUIView(_ view: PKCanvasView, context: Context) {
|
|
context.coordinator.parent = self
|
|
view.overrideUserInterfaceStyle = colorScheme == .dark ? .dark : .light
|
|
if view.drawing != drawing {
|
|
view.drawing = drawing
|
|
}
|
|
}
|
|
|
|
func makeCoordinator() -> Coordinator { Coordinator(parent: self) }
|
|
|
|
final class Coordinator: NSObject, PKCanvasViewDelegate {
|
|
var parent: LeadSignatureCanvas
|
|
|
|
init(parent: LeadSignatureCanvas) { self.parent = parent }
|
|
|
|
func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
|
|
parent.drawing = canvasView.drawing
|
|
}
|
|
}
|
|
}
|