ImageRenderer는 SwiftUI 뷰로부터 이미지를 생성하는 객체다.
만약 그래픽 또는 복잡한 뷰를 생성하기 위해서 해당 그래픽 또는 뷰를 다시 사용하기 위해서 다시 생성하는 것보다 파일이나 데이터베이스에 저장하는 것이 더 효율적이다. 이런 상황을 위해서 view를 image로 변환할 수 있다. SwiftUI는 ImageRenderer 를 이런 목적으로 포함시켰다.
위에서 말한 Image는 3가지 종류가 있다 UIKit의 UIImage, Core Graphics의 CGImage, AppKit의 NSImage
view를 iamge로 변환하기 위해서 먼저 view를 프로퍼티에 저장해야 한다. 아래 코드에서 newPicture에 뷰를 저장한다. 그리고 버튼을 눌렀을 때 ImageRenderer를 사용하여 view가 저장된 newPicture로 렌더링된 이미지를 renderer에 넣습니다. 렌더링된 값인 renderer로부터 uiImage를 추출하여 img에 넣습니다. 추가로 preparingThumbnail 처럼 이미지의 사이즈를 줄여서 저장할수도 있다.
하지만 파일이나 데이터 베이스에 저장하는 방법도 있으므로 임시적으로 값을 저장해야하는 경우에 쓰는 것이 적절할 것 같다.
import SwiftUI
struct ContentView: View {
@State private var pattern: UIImage?
let newPicture = NewPictureView()
var body: some View {
VStack {
newPicture
Button("Export Image") {
let renderer = ImageRenderer(content: newPicture)
if let img = renderer.uiImage {
pattern = img.preparingThumbnail(of: CGSize(width: 25, height: 25))
}
}
if let pattern {
Image(uiImage: pattern)
.resizable(resizingMode: .tile)
.frame(width: 200, height: 200)
}
Spacer()
}
}
}
struct NewPictureView: View {
var body: some View {
Image(.spot1)
.resizable()
.scaledToFit()
.frame(width: 150, height: 200)
.clipShape(Circle())
}
}
#Preview {
ContentView()
}
'SwiftUI' 카테고리의 다른 글
CryptoKit in SwiftUI - 비밀번호 암호화 (0) | 2023.11.07 |
---|---|
Errors - Throwing Errors, Handling Errors, Results (0) | 2023.11.07 |
Effect (scaleEffect, rotation3DEffect) (0) | 2023.11.06 |
animations (0) | 2023.11.06 |
Gradient (0) | 2023.11.06 |