PROGRAMMING CODE/SWIFT
[UIkit] 갤러리에서 사진 선택하기, 화면 요소 제스쳐 이벤트처리(PhotosUI, PHPicker)
daye_
2023. 12. 12. 23:19
ViewController.swift
class MemoDetailViewController: UIViewController {
...
// 제스쳐 설정 (이미지뷰가 눌리면, 실행)
func setupTapGestures() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(touchUpImageView))
detailView.mainImageView.addGestureRecognizer(tapGesture)
detailView.mainImageView.isUserInteractionEnabled = true
}
@objc func touchUpImageView() {
print("이미지뷰 터치")
setupImagePicker()
}
func setupImagePicker() {
// 기본설정 셋팅
var configuration = PHPickerConfiguration()
configuration.selectionLimit = 1 //리미트 0이면 무한대 설정가능,
configuration.filter = .any(of: [.images, .videos]) //이미지, 비디오 다. 가능
// 기본설정을 가지고, 피커뷰컨트롤러 생성
let picker = PHPickerViewController(configuration: configuration)
// 피커뷰 컨트롤러의 대리자 설정
picker.delegate = self
// 피커뷰 띄우기
self.present(picker, animated: true, completion: nil)
}
...
}
extension MemoDetailViewController: PHPickerViewControllerDelegate {
// 사진이 선택이 된 후에 호출되는 메서드
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
// 피커뷰 dismiss
picker.dismiss(animated: true)
let itemProvider = results.first?.itemProvider
if let itemProvider = itemProvider, itemProvider.canLoadObject(ofClass: UIImage.self) {
itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in
DispatchQueue.main.async {
// 선택한 이미지를 이미지뷰에 표시
self.detailView.mainImageView.image = image as? UIImage
}
}
} else {
print("이미지 불러오기 실패")
}
}
}