티스토리 뷰

프로필 사진 등록, 편집 등 앱 내에서 해당 기능들이 수반되려면 앨범이나 카메라를 통해 이미지를 받아 화면에 띄우고, 편집을 할 수 있어야 하며 작업이 다 끝난 후에는 다시 앨범으로 저장까지 하는 과정이 필요합니다.

 

해당 작업을 하기 위한 기본적인 코드를 알아보겠습니다.

1. 앨범, 카메라 사용 권한 등록

먼저 애플의 까다로운 사생활 보호 정책으로 인해 해당 기능의 필요한 시점과 위치에서 사용 권한을 물어보는 팝업을 띄워줘야 합니다.

String값으로는 해당 팝업을 띄워줬을 때 클라이언트에게 보여줄 설명을 작성해주면 됩니다.

override func viewDidLoad() {
    super.viewDidLoad()
    PHPhotoLibrary.requestAuthorization( { status in })

}

예제 코드는 뷰가 로드되었을 때 해당 권한을 물어보도록 작성되었습니다. 해당 코드를 필요한 위치에 작성해주면 되겠습니다.

 

2.  ImagePicker 띄우기

사진 추가하기나 카메라 실행 버튼을 통해서 앨범이나 카메라를 불러오겠죠? 그 위치에 해당 코드를 작성해줍니다.

let imagePicker = UIImagePickerController()

// 모달 형식이기에, 모달 방식에서 화면 전환 스타일을 골라줄 수 있어요.
imagePicker.modalPresentationStyle = .fullScreen

// 앨범에서 불러올 지, 카메라를 실행할 지 골라주세요. 저는 앨범으로 했어요.
imagePicker.sourceType = .photoLibrary

// 이미지 피커를 다루기 위해 대리자를 채택해주세요.
imagePicker.delegate = self

// 사진을 찍거나 앨범에서 가져왔을 때, 해당 사진을 정방형(1:1)으로 편집을 원하면 추가해주세요.
imagePicker.allowsEditing = true

// 이미지 피커 실행
present(imagePicker, animated: true)

3. 대리자를 채택하고 각종 이벤트 처리해주기

사진을 찍어 확인을 누르거나 앨범에서 사진을 선택했을 때, 그리고 취소를 눌렀을 때의 이벤트를 처리해줍니다.

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        
        var newImage: UIImage? = nil // update 할 이미지
        
        if let possibleImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
            newImage = possibleImage // 수정된 이미지가 있을 경우(편집을 사용했을 때)
        } else if let possibleImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            newImage = possibleImage // 원본 이미지가 있을 경우
        }
        
        self.imageView.image = newImage // 받아온 이미지를 update (imageView는 화면에 띄워 줄 UIImageView를 의미)
        picker.dismiss(animated: true, completion: nil) // picker를 닫아줌
        
    }
    
    // 취소 버튼을 눌렀을 때 이미지 피커를 dismiss 시킴
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
}

+) 이미지 뷰의 이미지를 앨범에 저장하기

해당 코드를 저장 버튼 속에 넣어주면 되겠습니다.

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

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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 31
글 보관함