티스토리 뷰

Frontend/iOS

[iOS] View를 Image로 Rendering하기

데니 Denny 2020. 3. 15. 14:33
반응형
SMALL

이번 포스트에서는 UIView를 Image로 Rendering하여 앨범에 저장하는 방법에 대해 살펴보도록 하겠습니다.

 

권한 추가

우선 앨범에 접근을 해야 하므로 접근 권한을 요청하여야 합니다.

info.plist에 아래와 같이 "App Transport Security~", "Allow Arbitrary Loads = YES"항목을 추가해주시기 바랍니다.

위 항목을 info.plist에 추가해주시기 바랍니다.

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를 이미지로 렌더링 하는 방법에 대해 살펴보았습니다.

 

 

반응형
LIST
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함