[iOS] View를 Image로 Rendering하기
이번 포스트에서는 UIView를 Image로 Rendering하여 앨범에 저장하는 방법에 대해 살펴보도록 하겠습니다.
권한 추가
우선 앨범에 접근을 해야 하므로 접근 권한을 요청하여야 합니다.
info.plist에 아래와 같이 "App Transport Security~", "Allow Arbitrary Loads = YES"항목을 추가해주시기 바랍니다.
Storyboard 생성 및 레이아웃 구성
Sample로 뷰를 스토리보드에 배치하도록 합니다. 저는 중첩된 View도 이미지로 변환할 수 있는지 검증하기 위하여 2개의 View를 겹쳐 구성하였으며 각 View에는 다른 배경색상을 적용하였습니다.
Image Rendering하고 앨범에 저장하기
실제로 View를 이미지로 렌더링하고 앨범에 저장하는 기능을 구현해보도록 하겠습니다.
우선 이미지로 렌더링 하는 코드를 살펴보겠습니다.
@IBOutlet weak var viewForCapture: UIView!
private func renderViewAsImage() {
let renderer = UIGraphicsImageRenderer(size: viewForCapture.bounds.size)
let image = renderer.image { ctx in
viewForCapture.drawHierarchy(in: viewForCapture.bounds, afterScreenUpdates: true)
}
}
저장하고자 하는 View의 크기 만큼 이미지로 렌더링 하는 것을 확인할 수 있습니다.
여기에 앨범에 저장하는 코드를 넣어보도록 하겠습니다.
앨범에 추가하는 코드는 딱 한 줄이면 됩니다. 다만, Handler 메소드를 구현해야 하기 때문에 라인 수는 사람마다 다를 수 있습니다.
먼저 핸들러 메소드입니다. 이 메소드는 성공 및 실패에 따른 처리 로직을 넣는 메소드입니다. 저는 간단하게 Print를 하는 코드만 추가하였습니다.
@objc func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
// After Saving
if let error = error {
// error
print(error.localizedDescription)
} else {
// save
print("Image Saved")
}
}
이제 위의 이미지 렌더링 코드에 앨범에 저장하는 한 줄 코드를 추가하도록 하겠습니다.
UIImageWriteToSavedPhotosAlbum(image, self,
#selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
실제 코드를 실행하면 아래와 같이 원하는 View만 이미지로 렌더링되어 저장 된 것을 확인하실 수 있습니다.
이번 포스트에서는 View를 이미지로 렌더링 하는 방법에 대해 살펴보았습니다.