투케이2K

326. (ios/swift) PHPhotoLibrary 사용해 사용자 앨범 접근 및 이미지 사진 편집 수행 실시 본문

IOS

326. (ios/swift) PHPhotoLibrary 사용해 사용자 앨범 접근 및 이미지 사진 편집 수행 실시

투케이2K 2022. 11. 27. 18:16

[개발 환경 설정]

개발 툴 : 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)
    }
}
 

[결과 출력]

 

 

반응형
Comments