개발하는 뚝딱이

[iOS] 스크린샷 찍고 앨범에 저장하기 본문

iOS 개발일지

[iOS] 스크린샷 찍고 앨범에 저장하기

개발자뚝딱이 2020. 7. 1. 01:23

 

버튼을 누르면 자동으로 스크린샷이 찍히고, 앨범에 저장하기

 


 

 

 

Step1. 스크린 캡쳐

- 툴바 '카메라' 아이템을 클릭하면 화면 중앙에 아무렇게 배치되어 있는 UIImage에 화면 전체 스크린 캡쳐를 띄어주기

 

@IBAction func takeScreenshot(_ sender: UIBarButtonItem) {

        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, UIScreen.main.scale)
        self.view.drawHierarchy(in: self.view.frame, afterScreenUpdates: true)
        
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        if let image = image {
            self.image.image = image
        }
    }

 

void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

 

- 그림을 그리기 위한 장소인 비트맵 기반의 '컨텍스트'를 생성하는 함수

- 컨텍스트는 그래픽 컨텍스트 스택에 푸쉬됨

- opaque를 false로 주고, scale을 1.0으로 주면 UIGraphicsBeginImageContext() 함수와 같아지지만, 레티나 디스플레이에선 이미지 품질이 낮아진다는 글을 읽어 위의 함수를 사용하하였다

 

func drawHierarchy(in rect: CGRect, afterScreenUpdates afterUpdates: Bool) -> Bool

- 화면에 보이는 것처럼 뷰의 스냅샷을 현재 컨텍스트에 렌더링하는 함수

 

func UIGraphicsGetImageFromCurrentImageContext() -> UIImage?

- 컨텍스트에 있는 컨텐츠를 이미지로 반환하는 함수

 

func UIGraphicsEndImageContext()

- 현재 컨텍스트를 스택에서 제거

 

 

step2. 반환된 이미지를 앨범에 저장

func saveImage() {
        PHPhotoLibrary.requestAuthorization { status in
            guard status == .authorized, let image = self.screenshot else { return }
            PHPhotoLibrary.shared().performChanges({
                PHAssetChangeRequest.creationRequestForAsset(from: image)
            }, completionHandler: nil)
        }
        
    }

- Info.plist에서 'Privacy-PhotoLibrary Usage Description'을 추가해하여 권한 요청을 한다

 

https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/capturing_still_and_live_photos/saving_captured_photos

위 글이 많은 도움이 되었다! 심지어 코드도 그냥 줌...!

 

Finish!

 

'iOS 개발일지' 카테고리의 다른 글

[iOS] iOS + Realm 모델 사용하기  (0) 2020.10.06
[iOS] iOS Device Support  (0) 2020.09.17
[iOS] Firebase 연동하기  (0) 2020.06.30
[iOS] 알람, 타이머1  (2) 2020.05.27
[iOS] 환율계산기 4 - 업데이트 1.1  (0) 2020.05.13