66 lines
2.5 KiB
Swift
66 lines
2.5 KiB
Swift
import SwiftUI
|
||
import PencilKit
|
||
|
||
#Preview("Unterschrift · Dark Mode", traits: .fixedLayout(width: 700, height: 240)) {
|
||
@Previewable @State var drawing = PKDrawing(strokes: [
|
||
PKStroke(
|
||
ink: PKInk(.pen, color: .black),
|
||
path: PKStrokePath(controlPoints: [
|
||
CGPoint(x: 100, y: 90), CGPoint(x: 150, y: 35),
|
||
CGPoint(x: 140, y: 95), CGPoint(x: 210, y: 55),
|
||
CGPoint(x: 240, y: 90), CGPoint(x: 320, y: 65)
|
||
].enumerated().map { index, point in
|
||
PKStrokePoint(location: point, timeOffset: Double(index) * 0.1,
|
||
size: CGSize(width: 3, height: 3), opacity: 1, force: 1,
|
||
azimuth: 0, altitude: .pi / 2)
|
||
}, creationDate: .now)
|
||
)
|
||
])
|
||
LeadSigningSignatureView(signerName: "Klaus Hoffmann", drawing: $drawing, isEnabled: true)
|
||
.padding(20)
|
||
.background(Color(uiColor: .systemGroupedBackground))
|
||
.preferredColorScheme(.dark)
|
||
}
|
||
|
||
struct LeadSigningSignatureView: View {
|
||
let signerName: String
|
||
@Binding var drawing: PKDrawing
|
||
let isEnabled: Bool
|
||
|
||
var body: some View {
|
||
VStack(spacing: 8) {
|
||
HStack {
|
||
Text("UNTERSCHRIFT · \(signerName)")
|
||
.font(.caption).foregroundStyle(.secondary)
|
||
Spacer()
|
||
Button("Löschen") { drawing = PKDrawing() }
|
||
.disabled(drawing.strokes.isEmpty || !isEnabled)
|
||
}
|
||
.padding(.horizontal, 16)
|
||
ZStack {
|
||
VStack {
|
||
Spacer()
|
||
if drawing.strokes.isEmpty {
|
||
Label("Mit Finger oder Apple Pencil unterschreiben", systemImage: "signature")
|
||
.font(.subheadline).foregroundStyle(.secondary)
|
||
.multilineTextAlignment(.center)
|
||
}
|
||
Spacer()
|
||
HStack {
|
||
Text("×").foregroundStyle(.secondary)
|
||
Spacer()
|
||
}
|
||
Rectangle().fill(Color(uiColor: .separator)).frame(height: 1)
|
||
}
|
||
.padding(24)
|
||
.allowsHitTesting(false)
|
||
LeadSignatureCanvas(drawing: $drawing)
|
||
.allowsHitTesting(isEnabled)
|
||
}
|
||
.frame(height: 150)
|
||
.background(Color(uiColor: .secondarySystemGroupedBackground), in: .rect(cornerRadius: 12))
|
||
.clipShape(.rect(cornerRadius: 12))
|
||
}
|
||
}
|
||
}
|