我有下面的代码,它在我的SwiftUI macOS应用程序中显示了一个保存面板。
它需要能够显示文件格式选择器,该选择器在标准附件视图中可用。
然而,启用此视图的关键似乎丢失了(类型为“NSSavePanel”的值没有成员“shouldRunSavePanelWithAccessoryView”),并且我找不到任何关于何时删除此视图的引用,也找不到任何替代方法。
有没有聪明人知道怎么回事?
代码:
private func saveToFile() {
appState.triggerViewUpdate.toggle()
let panel = NSSavePanel()
panel.nameFieldLabel = "Save adjusted image as:"
panel.nameFieldStringValue = "adjustedimage.png"
panel.canCreateDirectories = true
panel.showsTagField = false
panel.isExtensionHidden = false
// this generates error "Value of type 'NSSavePanel' has no member 'shouldRunSavePanelWithAccessoryView'"
panel.shouldRunSavePanelWithAccessoryView = true
//
if #available(OSX 11.0, *) {
let allowedContentTypes = [UTType.png, UTType.jpeg]
panel.allowedContentTypes = allowedContentTypes
} else {
let allowedFileTypes = [".png", ".jpeg"]
panel.allowedFileTypes = allowedFileTypes // not sure if we need this
}
panel.begin { response in
if response == NSApplication.ModalResponse.OK, let savePath = panel.url {
if debug { print("savePath: \(savePath)") }
let ciImage = applyFilters(textureIn: appState.imageTexture!)
let cgImage = ciImage.asCGImage()
let nsImage = NSImage(cgImage: cgImage!, size: ciImage.extent.size)
if nsImage.pngWrite(to: savePath) {
print("File saved")
}
}
}
}发布于 2021-02-13 10:45:28
我设法用IKSaveOptions解决了这个问题
let panel = NSSavePanel()
let options = IKSaveOptions(imageProperties: [:],
imageUTType: kUTTypeImage as String)!
options.addAccessoryView(to: panel)
panel.begin { response in
if response == .OK, let savePath = panel.url {
//...
}
}https://stackoverflow.com/questions/66151966
复制相似问题