스토리보드에 정의된 메모 작성 화면
(아래 폭포수 이미지는 해당 위치에 이미지가 배치된다는 걸 알려주기 위해 일부러 넣음)
사용자가 카메라 버튼을 눌렀을 때 호출되는 액션 메소드 구현
// 카메라 버튼을 클릭했을 때 호출되는 메소드
@IBAction func pick(_ sender: Any) {
let alert = UIAlertController(title: nil, message: "이미지를 가져올 곳을 선택해주세요", preferredStyle: .actionSheet)
// 이미지 피커 인스턴스를 생성
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
alert.addAction(UIAlertAction(title: "카메라", style: .default){ (_) in
picker.sourceType = .camera
self.present(picker, animated: false)
})
alert.addAction(UIAlertAction(title: "저장앨범", style: .default){ (_) in
self.present(picker, animated: false)
})
// 이미지 피커 화면을 표시
self.present(alert, animated: false)
}
위의 구현된 이미지 피커 컨트롤러에 대한 순서는 다음과 같음
1. 이미지 피커 컨트롤러 인스턴스 생성
2. 이미지 피커 컨트롤러 인스턴스의 델리게이트 속성을 현재의 뷰 컨트롤러 인스턴스로 설정
3. 이미지 피커 컨트롤러의 이미지 편집을 허용
4. 이미지 피커 컨트롤러 화면을 표시
이미지 피커 컨트롤러는 델리게이트 패턴 기반으로 동작
여기서 MemoFormVC 뷰 컨트롤러는 이미지 피커 컨트롤러의 동작에 참여하지 않지만,
만약에 이미지 피커 컨트롤러를 통한 특정 이벤트가 발생할 경우 뷰 컨트롤러에 알려야 함
이 때, 알리는 방법은 메소드 호출인데, 이를 델리게이트 메소드라고 함
델리게이트 메소드
// 이미지 선택을 완료했을 때 호출되는 메소드
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
self.preview.image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
picker.dismiss(animated: false)
}
델리게이트 메소드는 미리 약속된 부분이기 때문에
구현함에 있어 정확하게 해야 함
'Project > Memo' 카테고리의 다른 글
메모 상세 화면 구현 (1) | 2024.01.26 |
---|---|
메모 목록 화면 구현 (0) | 2024.01.26 |
메모 작성 화면 구현 (메모 저장) (1) | 2024.01.26 |
메모 앱 기능 구현 (데이터 모델 작업) (1) | 2024.01.26 |