-
[Swift/Study] 카메라 촬영 & 앨범에서 사진 가져오기Study/ios 2023. 7. 7. 17:34
이번에는 촬영하거나 앨범에서 가져온 사진을 이미지뷰에 출력하는 것을 해보겠다.
먼저 카메라와 앨범 사용(권한)을 위해 info.plist에 다음과 같은 2개의 내용을 추가해준다.
버튼과 이미지 뷰를 추가해주고 아울렛 변수와 액션 함수를 코드에 추가한다.
@IBOutlet var imageView: UIImageView! @IBAction func addImage(_ sender: Any) { }
그리고 "사진 촬영"과 "앨범에서 가져오기"로 구성된 액션 시트를 만들어준다.
func showActionSheet() { let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) // 사진 촬영 액션 let takePhotoAction = UIAlertAction(title: "사진 촬영", style: .default) { _ in self.openCamera() } // 앨범에서 가져오기 액션 let choosePhotoAction = UIAlertAction(title: "앨범에서 가져오기", style: .default) { _ in self.openPhotoLibrary() } // 취소 액션 let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil) // 액션 추가 alertController.addAction(takePhotoAction) alertController.addAction(choosePhotoAction) alertController.addAction(cancelAction) // 액션 시트 표시 present(alertController, animated: true, completion: nil) }
위 코드에 있는 openCamera()와 openPhotoLibrary()함수를 구현해준다.
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { // 카메라 열기 func openCamera() { let imagePicker = UIImagePickerController() if UIImagePickerController.isSourceTypeAvailable(.camera) { imagePicker.sourceType = .camera // 카메라 imagePicker.delegate = self present(imagePicker, animated: true, completion: nil) } else { print("카메라를 사용할 수 없습니다.") } } // 앨범 열기 func openPhotoLibrary() { let imagePicker = UIImagePickerController() if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { imagePicker.sourceType = .photoLibrary // 앨범 imagePicker.delegate = self present(imagePicker, animated: true, completion: nil) } else { print("앨범에 접근할 수 없습니다.") } } }
카메라와 앨범에서 사진을 가져오려면 UIImagePickerControllerDelegate, UINavigationControllerDelegate를 위임해줘야 한다.
UIImagePickerControllerDelegate는 이미지 피커의 동작과 관련된 이벤트를 처리하는 프로토콜이고 UINavigationControllerDelegate는 내비게이션 컨트롤러와 관련된 이벤트를 처리하는 프로토콜이다.
UIImagePickerController는 내비게이션 컨트롤러로 구현되어 있기 때문에,
이미지 피커를 사용할 때 UINavigationControllerDelegate를 함께 구현해야 한다.
// 사진 선택 완료 시 호출되는 delegate 메서드 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let selectedImage = info[.originalImage] as? UIImage { imageView.image = selectedImage // 이미지 뷰에 촬영하거나 가져온 사진을 출력 } picker.dismiss(animated: true, completion: nil) } // 사진 선택 취소 시 호출되는 delegate 메서드 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) }
사진을 촬영하거나 앨범에서 가져오면 이미지 뷰에 해당 사진을 출력하고 카메라나 앨범을 종료한다.
결과
사진 등록 버튼 터치시
사진 촬영을 선택하면?
권한을 구한다. 확인을 선택.
사진 촬영을 할 수 있는 상태가 된다.
원하는 사진을 찍고 Use Photo를 선택하면?
이미지 뷰에 잘 출력된 모습!!
액션 시트에서 앨범에서 가져오기를 선택해 보자.
앨범이 올라오고 원하는 사진을 한 장 선택하면??
마찬가지로 이미지 뷰에 잘 출력된 모습!!
'Study > ios' 카테고리의 다른 글
[Swift/Clone] 카카오톡 대화창 클론 코딩2 (1) 2023.07.13 [Swift/Clone] 카카오톡 대화창 클론 코딩1 (0) 2023.07.11 [Swift/Study] 탭바 모양 커스텀 하기 (둥글게 휘게하고 동그란 버튼 넣기) (1) 2023.07.06 [Swift/Study] PickerView (0) 2023.07.06 [Swift/Study] 텍스트 및 사진 공유하기 (한국말 설정) (0) 2023.07.05