PHAsset에 관하여2(with. iOS버전별 사용법, PHPicker)
by 사슴비행기저번 글에서
PHAsset을 순정으로 가져오기 위해서는 래핑을 해제하고 순회해야 한다고 했는데
이 방법이 변경되어 추가적으로 글을 쓰게 되었다.
이전에는 fetchAsset 메서드를 통해서 PHAsset을 가져와야 했는데,
iOS11 이후로는 UIImagePickerControllerDelegate의 메서드를 통해서 바로 PHAsset을 가져올 수 있었다.
그런데!! 놀랍게도 앞으로는 여기서 PHAsset을 가져오는 방법이 사라질 것이라는 소식을 알게되었다!!
심지어 새로운 방법은 따로 라이브러리를 쓰지 않아도 멀티 셀렉트가 가능함!! 대박스!!
그리고 그리고 심지어 사진 사용권한도 따로 설정 안해도 된단다!
세상에 마상에!
일단 변천사를 보자면 이렇다.
저번에 내가 쓴 야매 방법
asset.value(forKey: "filename")
iOS11 이전의 방법
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL {
let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)
let assetResources = PHAssetResource.assetResources(for: result.firstObject!)
print(assetResources.first!.originalFilename)
}
dismiss(animated: true, completion: nil)
}
iOS11 이후의 방법
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let asset = info[.phAsset] as? PHAsset {
let resource = PHAssetResource.assetResources(for: asset)
let fileName = resource.first?.originalFilename
}
}
근데 info[.phAsset]을 하는 순간 경고창이 떴다.
ㅇㅇ 앞으로 버전에선 phAsset이 없어질거얌. 그니깐 PHPicker를 사용해!
이런 문구였다.
PHPicker가 뭐지 구글링을 해보니
처음에 적었던 것처럼 멀티 셀렉트에 권한 설정 필요없는 그런 새로운 기능이라는 것을
알게된 것이다!!
쨌든 사용법은 아래와 같다!
iOS14 이후 방법
import UIKit
//1. import PhotosUI
import PhotosUI
class ViewController: UIViewController {
lazy var picker: PHPickerViewController = {
//2. Create PHPickerConfiguration
var configuration = PHPickerConfiguration()
configuration.selectionLimit = 3
configuration.filter = .any(of: [.images, .livePhotos])
//3. Initialize PHPicker
let picker = PHPickerViewController(configuration: configuration)
return picker
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
picker.delegate = self
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
present(picker, animated: true, completion: nil)
}
}
//4. conform PHPickerViewControllerDelegate
extension ViewController: PHPickerViewControllerDelegate {
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true, completion: nil)
}
}
이렇게 하면 따란~~
아래처럼 스무스하게 사용할 수 있다!!
어떠한 권한 설정과 라이브러리 사용 없이 말이다!
너무 편하고 신세계인것!!!
근데, 일단 여기까지 하고 받아온 이미지를 다루는 건 다음번에..
지금이 벌써 새벽 네시라고?!
너무 재밌어서 이러고 있었다..;;
참고한 글
'swift > basic knowlege of programming' 카테고리의 다른 글
PHAsset에 관하여(with. How to get PHAsset filename) (0) | 2022.02.04 |
---|---|
segue 여러개 연결하는 방법 (0) | 2021.10.09 |
UIFont.TextStyle 비교 (0) | 2021.10.03 |
UILabel size를 Text size에 맞추는 방법(혹은 그 반대) (3) | 2021.10.03 |
where Self: 이 무엇인가.. (0) | 2021.10.02 |
블로그의 정보
Beautiful Coding
사슴비행기