본문 바로가기
개발/Swift

SwiftUI에서 스크린샷을 앨범에 저장하는 방법

by Wrmoon 2023. 7. 13.
반응형

애플의 SwiftUI 프레임워크를 사용하여 iOS 앱의 사용자 인터페이스를 구축하는 도중, 스크린샷을 찍어 앨범에 저장하는 기능을 구현하고자 할 때가 있습니다. 이번 블로그 글에서는 UIView 확장(extension)을 사용하여 SwiftUI 뷰를 UIImage로 변환하고, 해당 이미지를 앨범에 저장하는 방법에 대해 알아보겠습니다.

 

단계 1: UIView 확장(extension) 구현하기

UIView 확장을 사용하여 해당 뷰를 UIImage로 변환하는 함수를 구현해보겠습니다. 이를 위해 다음과 같이 코드를 작성합니다.

import SwiftUI

extension UIView {
    func asUIImage() -> UIImage {
        let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { rendererContext in
            layer.render(in: rendererContext.cgContext)
        }
    }
}

위의 코드에서 asUIImage() 함수는 현재 UIView를 UIImage로 변환하는 역할을 합니다.

 

단계 2: 스크린샷 찍고 저장하기

이제 스크린샷을 찍은 후 해당 스크린샷을 앨범에 저장하는 함수를 구현해보겠습니다.

import SwiftUI
import Photos

func saveScreenshotToAlbum(_ screenshot: UIImage) {
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
    print("Screenshot saved successfully.")
}

위의 코드에서 saveScreenshotToAlbum(_:) 함수는 주어진 스크린샷 이미지를 앨범에 저장합니다. UIImageWriteToSavedPhotosAlbum 함수를 사용하여 스크린샷 이미지를 앨범에 저장한 후, "Screenshot saved successfully." 메시지를 출력합니다.

 

단계 3: 사용 예시

스크린샷을 찍고 저장하기 위해 다음과 같이 코드를 작성해봅시다.

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello, World!")
                .padding()
                .background(Color.blue)
                .foregroundColor(.white)
        }
        .onTapGesture {
            let screenshot = UIApplication.shared.windows.first?.rootViewController?.view.asUIImage()
            if let screenshot = screenshot {
                saveScreenshotToAlbum(screenshot)
            }
        }
    }
}

위의 코드에서는 ContentView라는 SwiftUI 뷰를 구현했습니다. 해당 뷰를 탭하면 스크린샷을 찍고 saveScreenshotToAlbum(_:) 함수를 사용하여 앨범에 저장합니다.

 

이제 SwiftUI를 사용하여 앱에서 스크린샷을 찍고 해당 스크린샷을 앨범에 저장하는 방법을 알게 되었습니다. 이러한 기능을 사용하여 사용자가 앱의 화면을 스크린샷으로 저장하고 공유할 수 있게 되었습니다. 다양한 앱에서 이 기능을 활용하여 사용자 경험을 향상시킬 수 있습니다.

반응형

댓글