首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存PencilKit图像- SwiftUI

保存PencilKit图像- SwiftUI
EN

Stack Overflow用户
提问于 2020-03-16 05:11:09
回答 2查看 3.5K关注 0票数 4

我有一个SwiftUI视图来使用UIViewRepresentable PencilKit视图捕获用户签名。视图捕获签名很好,但是当我试图保存签名时,保存的文件是一个空白/空的PNG文件。

代码语言:javascript
复制
import PencilKit

struct SignatureUI: View {
    let canvasView = PKCanvasView(frame: .init(x: 0, y: 0, width: 400.0, height: 100.0))
    let imgRect = CGRect(x: 0, y: 0, width: 400.0, height: 100.0)

    let today = Date()
    var dateFormatter: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        return formatter
    }

    var body: some View {
        VStack {
            Text ("Sign here:")
            PencilKitRepresentable()
                .frame(height: 100.0)
                .border(Color.gray, width: 5)
            Button(action: {
                self.saveSignature()
            }) {
                Text("Save Signature")
            }
        }
    }

    func saveSignature() {
        let image = canvasView.drawing.image(from: imgRect, scale: 1.0)
        if let data = image.pngData() {
            let filename = getDocumentsDirectory().appendingPathComponent("\(self.dateFormatter.string(from: self.today)).png")
            try? data.write(to: filename)
            print(filename)
        }
    }
}

struct PencilKitRepresentable : UIViewRepresentable {

    func makeUIView(context: Context) -> PKCanvasView {
        return PKCanvasView(frame: .init(x: 0, y: 0, width: 400, height: 80));
    }

    func updateUIView(_ uiView: PKCanvasView, context: Context) {

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-17 01:00:43

我想你用的是两种不同的画布。

试着做这样的事情:

代码语言:javascript
复制
struct PencilKitRepresentable : UIViewRepresentable {
    let canvas = PKCanvasView(frame: .init(x: 0, y: 0, width: 400, height: 80))
    func makeUIView(context: Context) -> PKCanvasView {
        return canvas
    }
    func updateUIView(_ uiView: PKCanvasView, context: Context) { }
}

以及:

代码语言:javascript
复制
struct SignatureUI: View {
    let canvasView = PencilKitRepresentable()
    let imgRect = CGRect(x: 0, y: 0, width: 400.0, height: 100.0)

    var body: some View {
      VStack {
          Text ("Sign here:")
          canvasView.frame(height: 100.0)
              .border(Color.gray, width: 5)
          Button(action: {
              self.saveSignature()
          }) {
              Text("Save Signature")
          }
      }
  }

func saveSignature() {
    let image = canvasView.canvas.drawing.image(from: imgRect, scale: 1.0)
    ...

    }

}
票数 7
EN

Stack Overflow用户

发布于 2020-03-16 23:59:24

你能试试这个吗?

代码语言:javascript
复制
if let img = drawImage(image), let data = img.pngData() { 
....
}

func drawImage(_ image: UIImage) -> UIImage? {
    guard let cgimg = image.cgImage else { return nil }
    UIGraphicsBeginImageContext(CGSize(width: cgimg.width, height: cgimg.height))
    image.draw(in: CGRect(x: 0, y: 0, width: cgimg.width, height: cgimg.height))
    let theimg = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return theimg
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60700609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档