SwiftUI에서 ImagePicker 사용하는 법

kyle Kim·2022년 6월 15일
0

iOS개발

목록 보기
10/22

'UIViewControllerRepresentable'를 사용해서 UIKit의 UIImagePickerController를 가져와준다. 그리고 coordinator를 만들어줘서 필요한 delegate의 function들을 사용해준다.

struct ImagePickerView: UIViewControllerRepresentable {
    var sourceType : UIImagePickerController.SourceType = .photoLibrary
    
    @Binding var image : UIImage?
    @Binding var isPresented : Bool
    
    func makeCoordinator() -> ImagePickerCoordinator {
        return ImagePickerCoordinator(image: $image, isPresented: $isPresented)
    }
    
    func makeUIViewController(context: Context) -> UIImagePickerController {
        let imagePicker = UIImagePickerController()
        imagePicker.sourceType = sourceType
        imagePicker.delegate = context.coordinator
        return imagePicker
    }
    
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {
        
    }
}

class ImagePickerCoordinator : NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    @Binding var image : UIImage?
    @Binding var isPresented : Bool
    
    init(image : Binding<UIImage?>, isPresented : Binding<Bool>) {
        self._image = image
        self._isPresented = isPresented
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            self.image = image
        }
        self.isPresented = false
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.isPresented = false
    }
}

*참고로 binding하는 image를 그냥 Image로 사용해도 잘 돌아감.

profile
가고일(gagoil)의 개발일지

0개의 댓글