I want to use SwiftData to store my PKDrawing data. I’m not interested in using CoreData or UserDefaults. I need the app to save the current drawing state when it is closed and to display the saved drawing when it is reopened.
import SwiftUI
import SwiftData
@main
struct Test_DrawingApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}.modelContainer(for: DrawingData.self)
}
}
import SwiftData
@Model
class DrawingData {
var drawingData: Data?
init() {
drawingData = nil
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
CanvasView()
}
}
import SwiftUI
import UIKit
import PencilKit
struct CanvasView {
@State var canvasView: PKCanvasView = PKCanvasView()
@State var toolPicker = PKToolPicker()
}
extension CanvasView: UIViewRepresentable {
func makeUIView(context: Context) -> PKCanvasView {
let contentWidth = UIScreen.main.bounds.width
let contentHeight = UIScreen.main.bounds.height
canvasView.contentSize = CGSize(width: contentWidth, height: contentHeight)
canvasView.drawingPolicy = .anyInput
canvasView.backgroundColor = UIColor(red: 0.9, green: 0.9, blue: 0.9, alpha: 1.0)
canvasView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
canvasView.becomeFirstResponder()
toolPicker.setVisible(true, forFirstResponder: canvasView)
toolPicker.addObserver(canvasView)
return canvasView
}
func updateUIView(_ uiView: PKCanvasView, context: Context) {}
}
This issue has been challenging me for a while. Could anyone suggest how to achieve this? Thank you very much.