(커스텀)델리게이트 + 노티 + 피커뷰
import PhotosUI
extension ViewController: 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("이미지를 불러오지 못했습니다.")
}
}
}
Swift
복사
func setupImagePicker() {
// 기본설정 세팅
var configuration = PHPickerConfiguration()
configuration.selectionLimit = 0
configuration.filter = .any(of: [.images, .videos])
// 기본설정을 가지고, 피커뷰 컨트롤러 생성
let picker = PHPickerViewController(configuration: configuration)
// 피커뷰 컨트롤러의 대리자 설정
picker.delegate = self
// 피커뷰 띄우기
self.present(picker, animated: true, completion: nil)
}
Swift
복사
// MARK: - 이미지뷰가 눌렸을 때의 동작 과정
// 제스처 설정 (이미지뷰가 눌리면 실행)
func setupTapGestures() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(touchUpImageView))
detailView.mainImageView.addGestureRecognizer(tapGesture)
detailView.mainImageView.isUserInteractionEnabled = true
}
@objc func touchUpImageView() {
print("이미지뷰 터치")
setupImagePicker()
}
Swift
복사