Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Arakel99 opened this issue Aug 13, 2023 · 0 comments
Open

Comments

@Arakel99
Copy link

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")
            }
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant