Skip to content

Save the signatureView.signature as a binding variable for another view.  #66

@Arakel99

Description

@Arakel99

XCode: 14.3.1
SwiftSignatureView: 3.2.0

Hello,

I am saving the signatureView.signature into a variable and outputting it directly as an image.

// ... code ...
@State private var signatureImage: UIImage?
@Binding var signature: String 
// ... code ... /
SignatureCaptureView(signatureImage: $signatureImage)
                .frame(height: 200)
                .border(Color.gray, width: 1)
// ... code ...
if let img = signatureImage {
      Image(uiImage: img)
          .resizable()
          .scaledToFit()
          .frame(width: 300, height: 200)
          .background(Color.gray.opacity(0.2))
          .id(UUID())
  } else {
      Text("No signature yet")
          .background(Color.gray.opacity(0.2))
          .frame(width: 300, height: 200)
  }

But it does not show the Last Drawing. So if I draw 2 strokes, it only shows the first one. If I draw 3 lines, it only shows the first two. So it always does NOT show the last one.

SignatureCaptureView.swift:

import SwiftUI
import SwiftSignatureView


struct SignatureCaptureView: UIViewRepresentable {
    @Binding var signatureImage: UIImage?
    private var signatureView: SwiftSignatureView // Diese Eigenschaft hinzufügen
    var coordinator: Coordinator? // Füge ein Coordinator-Objekt hinzu

    func getCroppedSignature(from view: SwiftSignatureView) -> UIImage? {
        return view.getCroppedSignature()
    }

    init(signatureImage: Binding<UIImage?>) {
        self._signatureImage = signatureImage
        self.signatureView = SwiftSignatureView()
    }
    func makeUIView(context: Context) -> SwiftSignatureView {
        let signatureView = SwiftSignatureView()
        signatureView.delegate = context.coordinator
        return signatureView
    }

    func updateUIView(_ uiView: SwiftSignatureView, context: Context) {
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    class Coordinator: NSObject, SwiftSignatureViewDelegate {
        var parent: SignatureCaptureView
        var signatureView: PencilKitSignatureView? // Speichere die SignatureView


        init(_ parent: SignatureCaptureView) {
            self.parent = parent
        }

        
        func updateUIView(_ view: ISignatureView) {
            if let signatureView = view as? PencilKitSignatureView {
                parent.signatureImage = signatureView.signature
                view.signature = signatureView.signature
            }
            
        }

        func swiftSignatureViewDidDrawGesture(_ view: ISignatureView, _ tap: UIGestureRecognizer) {
            //print("triggered: DrawGesture")
            if let signatureView = view as? PencilKitSignatureView {
                //parent.signatureImage = signatureView.signature
            }
        }

        func swiftSignatureViewDidDraw(_ view: ISignatureView) {
            print("triggered: DidDraw")
            if let signatureView = view as? PencilKitSignatureView {
                print("saving...")
               parent.signatureImage = signatureView.signature
            } else {
                print("View konnte nicht zu PencilKitSignatureView gecastet werden")
            }
        }
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions