I'm using NSColorPanel to change the color of a view. The color of this view is also saved in a database (Firestore).
import AppKit
class ColorPanel {
static var shared = ColorPanel()
private var stage: DB.Stage.Document? = nil
private let cp = NSColorPanel.shared
init() {
cp.setTarget(self)
cp.setAction(#selector(colorDidChange(sender:)))
cp.isContinuous = false
}
func show(stage: DB.Stage.Document) {
self.stage = stage
cp.makeKeyAndOrderFront(nil)
}
@objc func colorDidChange(sender: NSColorPanel) {
guard let stage = stage else { return }
stage.data?.color.red = Double(sender.color.redComponent)
stage.data?.color.green = Double(sender.color.greenComponent)
stage.data?.color.blue = Double(sender.color.blueComponent)
stage.update()
}
}
The problem is that I would like to set isContinuos true in order to see my view changing color real-time, but is sending too much updates to the server, so I have been forced to set it false.
There is a way to solve this? I just need to do an update when I finish the drag but I don't know how.
p.s. To call the ColorPanel in my SwiftUI view I do:
ColorPanel.shared.show(stage: stage)
Please try an approach I would use. Disclaimer: not tested due to absent Firestore setup