Notice
Recent Posts
Recent Comments
Link
투케이2K
127. (ios/swift) photoLibrary 포토 사진 앨범 접근 및 선택 한 사진 이미지 뷰 (imageView) 에 표시 수행 본문
IOS
127. (ios/swift) photoLibrary 포토 사진 앨범 접근 및 선택 한 사진 이미지 뷰 (imageView) 에 표시 수행
투케이2K 2022. 3. 14. 14:54[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[사전 설정]
[소스 코드]
import UIKit
// MARK: [import 추가 실시]
import AVFoundation
import Photos
class A_Image: UIViewController {
// MARK: [클래스 설명]
/*
1. A_Image : 카메라, 앨범 접근 클래스
2. info.plist 권한 등록 필요 :
- Privacy - Camera Usage Description
- Privacy - Photo Library Usage Description
- Privacy - Access to a File Provide Domain Usage Description
- Privacy - Microphone Usage Description
*/
// MARK: - [전역 변수 선언 실시]
@IBOutlet weak var imageView: UIImageView! // 이미지 뷰
let photo = UIImagePickerController() // 앨범 이동을 위한 컨트롤러
// MARK: - [뷰 로드 실시]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("")
print("===============================")
print("[A_Image >> viewDidLoad() :: 뷰 로드 실시]")
print("===============================")
print("")
// [초기 이미지 뷰 배경 색상 지정 실시]
self.imageView.backgroundColor = UIColor.gray
// MARK: [앨범 컨트롤러 딜리게이트 지정 실시]
self.photo.delegate = self
}
// MARK: - [뷰 로드 완료]
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("")
print("===============================")
print("[A_Image >> viewWillAppear() :: 뷰 로드 완료]")
print("===============================")
print("")
}
// MARK: - [뷰 화면 표시]
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("")
print("===============================")
print("[A_Image >> viewDidAppear() :: 뷰 화면 표시]")
print("===============================")
print("")
// -----------------------------------------
// [뷰 컨트롤러 포그라운드, 백그라운드 상태 체크 설정 실시]
NotificationCenter.default.addObserver(self, selector: #selector(checkForeground), name: UIApplication.willEnterForegroundNotification, object: nil) // [포그라운드]
NotificationCenter.default.addObserver(self, selector: #selector(checkBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) // [백그라운드]
// -----------------------------------------
// [포그라운드 처리 실시]
checkForeground()
// -----------------------------------------
}
// MARK: - [뷰 정지 상태]
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("")
print("===============================")
print("[A_Image >> viewWillDisappear() :: 뷰 정지 상태]")
print("===============================")
print("")
}
// MARK: - [뷰 종료 상태]
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("")
print("===============================")
print("[A_Image >> viewDidDisappear() :: 뷰 종료 상태]")
print("===============================")
print("")
// -----------------------------------------
// [뷰 컨트롤러 포그라운드, 백그라운드 상태 체크 해제 실시]
NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil) // [포그라운드]
NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil) // [백그라운드]
// -----------------------------------------
}
// MARK: - [포그라운드 및 백그라운드 상태 처리 메소드 작성]
@objc func checkForeground() {
print("")
print("===============================")
print("[A_Image >> checkForeground() :: 뷰 컨트롤러 포그라운드]")
print("===============================")
print("")
}
@objc func checkBackground() {
print("")
print("===============================")
print("[A_Image >> checkBackground() :: 뷰 컨트롤러 백그라운드]")
print("===============================")
print("")
}
// MARK: - [버튼 클릭 이벤트 처리 실시]
@IBAction func buttonAction(_ sender: Any) {
print("")
print("===============================")
print("[A_Image >> buttonAction() :: 앨범 열기 버튼 클릭 이벤트 발생]")
print("===============================")
print("")
// [앨범의 사진에 대한 접근 권한 확인 실시]
PHPhotoLibrary.requestAuthorization( { status in
switch status{
case .authorized:
print("")
print("===============================")
print("[A_Image >> buttonAction() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 허용")
print("===============================")
print("")
// [앨범 열기 수행 실시]
self.openPhoto()
break
case .denied:
print("")
print("===============================")
print("[A_Image >> buttonAction() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 거부")
print("===============================")
print("")
break
case .notDetermined:
print("")
print("===============================")
print("[A_Image >> buttonAction() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 선택하지 않음")
print("===============================")
print("")
break
case .restricted:
print("")
print("===============================")
print("[A_Image >> buttonAction() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 접근 불가능, 권한 변경이 불가능")
print("===============================")
print("")
break
default:
break
}
})
}
// MARK: - [앨범 열기 수행 실시]
func openPhoto(){
DispatchQueue.main.async {
print("")
print("===============================")
print("[A_Image >> openPhoto() :: 앨범 열기 수행 실시]")
print("===============================")
print("")
// -----------------------------------------
// [사진 찍기 카메라 호출]
self.photo.sourceType = .photoLibrary // 앨범 지정 실시
self.photo.allowsEditing = false // 편집을 허용하지 않음
self.present(self.photo, animated: false, completion: nil)
// -----------------------------------------
}
}
} // [클래스 종료]
// MARK: [앨범 선택한 이미지 정보를 확인 하기 위한 딜리게이트 선언]
extension A_Image: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
// MARK: [사진, 비디오 선택을 했을 때 호출되는 메소드]
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let img = info[UIImagePickerController.InfoKey.originalImage]{
// [앨범에서 선택한 사진 정보 확인]
print("")
print("===============================")
print("[A_Image >> imagePickerController() :: 앨범에서 선택한 사진 정보 확인 및 사진 표시 실시]")
print("[사진 정보 :: ", info)
print("===============================")
print("")
// [이미지 뷰에 앨범에서 선택한 사진 표시 실시]
self.imageView.image = img as? UIImage
}
// [이미지 파커 닫기 수행]
dismiss(animated: true, completion: nil)
}
// MARK: [사진, 비디오 선택을 취소했을 때 호출되는 메소드]
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
print("")
print("===============================")
print("[A_Image >> imagePickerControllerDidCancel() :: 사진, 비디오 선택 취소 수행 실시]")
print("===============================")
print("")
// [이미지 파커 닫기 수행]
self.dismiss(animated: true, completion: nil)
}
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
Comments