Notice
Recent Posts
Recent Comments
Link
투케이2K
326. (ios/swift) PHPhotoLibrary 사용해 사용자 앨범 접근 및 이미지 사진 편집 수행 실시 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[권한 설정 방법]
[소스 코드]
import UIKit
import Foundation
import AVKit
import AVFoundation
import SafariServices
import PhotosUI
class A_Intro: UIViewController {
// MARK: - [전역 변수 선언 실시]
let ACTIVITY_NAME = "A_Intro"
let photo = UIImagePickerController() // 앨범 이동을 위한 컨트롤러
@IBOutlet weak var imageView: UIImageView! // 이미지 뷰
// MARK: - [뷰 로드 실시]
override func viewDidLoad() {
super.viewDidLoad()
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> viewDidLoad() :: 뷰 로드 실시]")
print("====================================")
print("")
// [테스트 함수 실행 실시]
self.testMain()
}
// MARK: - [뷰 로드 완료]
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> viewWillAppear() :: 뷰 로드 완료]")
print("====================================")
print("")
}
// MARK: - [뷰 화면 표시]
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> viewDidAppear() :: 뷰 화면 표시]")
print("====================================")
print("")
}
// MARK: - [뷰 정지 상태]
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> viewWillDisappear() :: 뷰 정지 상태]")
print("====================================")
print("")
}
// MARK: - [뷰 종료 상태]
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> viewDidDisappear() :: 뷰 종료 상태]")
print("====================================")
print("")
}
// MARK: - [테스트 메인 함수 정의 실시]
func testMain() {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 테스트 함수 시작 실시]")
print("====================================")
print("")
/*
-------------------------------
[요약 설명]
-------------------------------
1. 필요 info plist 설정 :
Privacy - Photo Library Usage Description
-------------------------------
*/
// [로직 처리 수행]
DispatchQueue.main.async {
// [앨범의 사진에 대한 접근 권한 확인 실시]
PHPhotoLibrary.requestAuthorization( { status in
switch status{
case .authorized:
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 허용")
print("====================================")
print("")
// [앨범 열기 수행 실시]
self.openPhoto()
break
case .denied:
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 거부")
print("====================================")
print("")
break
case .notDetermined:
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 권한 선택하지 않음")
print("====================================")
print("")
break
case .restricted:
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: 앨범 접근 불가능, 권한 변경이 불가능")
print("====================================")
print("")
break
default:
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 앨범의 사진에 대한 접근 권한 확인 실시]")
print("상태 :: default")
print("====================================")
print("")
break
}
})
}
}
// MARK: - [앨범 열기 수행 실시]
func openPhoto(){
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> openPhoto() :: 앨범 열기 수행 실시]")
print("====================================")
print("")
DispatchQueue.main.async {
self.photo.delegate = self // 앨범 컨트롤러 딜리게이트 지정 실시
self.photo.sourceType = .photoLibrary // 앨범 지정 실시
self.photo.allowsEditing = true // MARK: 편집을 허용
self.present(self.photo, animated: false, completion: nil)
}
}
} // [클래스 종료]
// MARK: [앨범 선택한 이미지 정보를 확인 하기 위한 딜리게이트 선언]
extension A_Intro: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
// MARK: [사진, 비디오 선택을 했을 때 호출되는 메소드]
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let img = info[UIImagePickerController.InfoKey.originalImage]{
// [앨범에서 선택한 사진 정보 확인]
print("")
print("====================================")
print("[A_Intro >> 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_Intro >> imagePickerControllerDidCancel() :: 사진, 비디오 선택 취소 수행 실시]")
print("====================================")
print("")
// [이미지 파커 닫기 수행]
self.dismiss(animated: true, completion: nil)
}
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
328. (ios/device) 샌드박스 (SandBox) 개념 설명 (0) | 2022.12.01 |
---|---|
327. (ios/swift) 키체인 (Keychain) 개념 간단 정리 및 예시 소스 코드 첨부 실시 (0) | 2022.11.30 |
325. (ios/swift) BSImagePicker 라이브러리 사용해 앨범 호출 및 이미지 선택 수행 실시 (0) | 2022.11.26 |
324. (ios/swift) CLLocation , CLGeocoder 사용해 실시간 사용자 위도 , 경도 및 주소 정보 확인 실시 (0) | 2022.11.25 |
323. (ios/objc) 오브젝티브 씨 NSFileManager 사용해 DocumentDirectory 파일 (file) 생성 및 저장 (0) | 2022.11.22 |
Comments