只要是View就能抓能存

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」。

發表迴響