Я использую NSColorPanel для изменения цвета вида. Цвет этого представления также сохраняется в базе данных (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()
}
}
Проблема состоит в том, что я хотел бы установить значение isContinuos в значение true, чтобы мой вид изменял цвет в реальном времени, но отправляет слишком много обновлений на сервере, поэтому я был вынужден установить значение false.
Есть способ решить эту проблему? Мне просто нужно сделать обновление, когда я закончу sh перетаскивание, но я не знаю как.
ps Для вызова ColorPanel в моем представлении SwiftUI я делаю:
ColorPanel.shared.show(stage: stage)