이번 포스트에서는 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를 이미지로 렌더링 하는 방법에 대해 살펴보았습니다.
'클라이언트' 카테고리의 다른 글
[iOS] Swift UI Group, View 속성 사용해보기 (0) | 2020.03.28 |
---|---|
[iOS] Swift UI 시작하기 (0) | 2020.03.28 |
[iOS] UINavigation Controller에서의 Status Bar Tint Color 해결 (0) | 2020.03.08 |
[watchOS] Apple Watch Life Cycle (0) | 2020.03.03 |
[watchOS] iPhone과 애플 워치 데이터 주고 받기 (0) | 2020.03.02 |