iOS16 提供了一個新函數,稱為 ImageRenderer(),可以將任何 SwiftUI 中的 View 元件內容轉成 UIImage 或 CGImage 格式作後續的處理,例如將畫出的圖表儲存起來。 程式碼非常簡單,如下:
struct MyView: View {
var body: some View {
Text("Hello, World!")
.padding()
.background(.mint)
}
}
struct ContentView: View {
var body: some View {
GeometryReader { proxy in
let size = proxy.size
Button("Save") {
let rendered = ImageRenderer(
content: MyView().frame(width: size.width, height: size.height)
)
rendered.scale = UIScreen().scale
UIImageWriteToSavedPhotosAlbum(rendered.uiImage!, nil, nil, nil)
}
.position(x: size.width / 2, y: size.height / 2)
}
}
}
這段程式碼會將 Text 元件內容儲存在「相簿」,所以在專案的 Info 列表中需要加上「Privacy – Photo Library Usage Description」。