Notice
Recent Posts
Recent Comments
Link
투케이2K
325. (ios/swift) BSImagePicker 라이브러리 사용해 앨범 호출 및 이미지 선택 수행 실시 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[권한 설정 방법]
[라이브러리 설치 방법]
[소스 코드]
import UIKit
import Foundation
import AVKit
import AVFoundation
import SafariServices
import PhotosUI
// MARK: [import 선언 실시]
import BSImagePicker
class A_Intro: UIViewController {
// MARK: - [전역 변수 선언 실시]
let ACTIVITY_NAME = "A_Intro"
@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
-------------------------------
2. 필요 import 설정 :
import BSImagePicker
-------------------------------
3. git 라이브러리 설치 주소 :
https://github.com/mikaoj/BSImagePicker.git
-------------------------------
4. git 참고 사이트 :
https://github.com/mikaoj/BSImagePicker
-------------------------------
*/
// [로직 처리 수행]
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("")
// [ImagePickerController 객체 생성 실시]
let imagePicker = ImagePickerController()
imagePicker.settings.theme.selectionStyle = .numbered // 이미지 선택 시 표시
imagePicker.settings.theme.backgroundColor = .darkGray // 배경 색상
imagePicker.albumButton.tintColor = .black // 버튼 색상
imagePicker.cancelButton.tintColor = .black // 버튼 색상
imagePicker.doneButton.tintColor = .black // 버튼 색상
imagePicker.settings.theme.selectionFillColor = .black // 선택 배경 색상 (Circle)
imagePicker.settings.theme.selectionStrokeColor = .white // 선택 표시 색상 (Circle)
imagePicker.settings.selection.max = 1 // 최대 선택 개수
imagePicker.settings.fetch.assets.supportedMediaTypes = [.image] // 이미지 타입
// [화면 전환 실시]
self.presentImagePicker(imagePicker, select: { (asset) in
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> openPhoto() :: select]")
print("====================================")
print("")
}, deselect: { (asset) in
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> openPhoto() :: deselect]")
print("====================================")
print("")
}, cancel: { (assets) in
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> openPhoto() :: cancel]")
print("====================================")
print("")
}, finish: { (assets) in
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> openPhoto() :: finish]")
print("선택한 이미지 개수 :: \(assets.count)")
print("선택한 이미지 정보 :: \(assets.description)")
print("====================================")
print("")
// [선택한 이미지 사이즈 변환]
if assets.count != 0 {
for i in 0..<assets.count {
let imageManager = PHImageManager.default()
let option = PHImageRequestOptions()
option.isSynchronous = true
var thumbnail = UIImage()
imageManager.requestImage(for: assets[i],
targetSize: CGSize(width: 200, height: 200),
contentMode: .aspectFit,
options: option) { (result, info) in
thumbnail = result!
}
let data = thumbnail.jpegData(compressionQuality: 0.7)
let newImage = UIImage(data: data!)
// [이미지 뷰에 표시 실시]
self.imageView.image = newImage! as UIImage
}
}
})
}
} // [클래스 종료]
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
Comments