[TIL] 2021.02.01


👩🏻‍💻 今日の勉強内容
  • Photosフレームワーク(ガイドコース2コメントサイト)
    -PhotosフレームワークはiOSとMacOSに写真アプリケーションと写真拡張機能をサポートするクラスを提供しています.Photosフレームワークを使用すると、iCloudフォトライブラリを含むiOSとTVOSから直接写真とビデオにアクセスできます.このフレームワークでは、画面に表示および再生するリソースを検索したり、画像またはビデオを編集したり、アルバム、特別な時刻、iCloud共有アルバムなどのリソースを使用して操作できます.
  • Info.plistは
  • のPrivacy-Photo Libraryの使用説明を追加しました
  • アクセスライセンス
  •     let photoAurhorizationStatus = PHPhotoLibrary.authorizationStatus()
        
        switch photoAurhorizationStatus  {
        case .authorized :
            print("접근 허가됨")
            self.requestCollection()
        case .denied :
            print("접근 불허")
        case .notDetermined:
            print("아직 응답하지 않음")
            PHPhotoLibrary.requestAuthorization( { (status) in
                switch status {
                case .authorized:
                    print("사용자가 허용함")
                    self.requestCollection()
                    DispatchQueue.main.async {
                        self.collectionView.reloadData()
                    }
                case .denied:
                    print("사용자가 불허함")
                default: break
                }
            })
        case .restricted:
            print("접근 제한")
        case .limited:
            print("접근 어쩌구")
        @unknown default:
            print("접근 오류")
        }
    輸入
  • Photos.
  •     import Photos 
  • Assetの結果を取得するFetchResultとサムネイルを取得するImageManagerを宣言します.
  •     var fetchResult: PHFetchResult<PHAsset>!
        var imageManager: PHCachingImageManager = PHCachingImageManager()
  • Assetを呼び出します.
  •     let cameraRoll: PHFetchResult<PHAssetCollection> = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil)
        guard let cameraRollCollection = cameraRoll.firstObject else {
            return
        }
        
        let fetchOptions = PHFetchOptions()
        // 최신 순으로 불러오는 옵션
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        // asset 불러오기
        self.fetchResult = PHAsset.fetchAssets(in: cameraRollCollection, options: fetchOptions) 
    接続
  • CollectionView
  • extension PhotoLibraryViewController:  UICollectionViewDataSource{
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return self.fetchResult?.count ?? 0
        }
        
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            
            guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoLibraryCell", for: indexPath) as? PhotoLibraryCell else { return UICollectionViewCell() }
            
            let asset: PHAsset = fetchResult.object(at: indexPath.item)
            imageManager.requestImage(for: asset, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFill, options: nil, resultHandler: { image, info in
                    cell.updateUI(image)
            })
            
            return cell
        }
    }
    ✍🏻 今日はね.
    UIImagePicker Controlを使用していますが、複数の写真を選択したいので、CollectionViewに資産データをインポートできるPhotoKitに変更します.PhotoKit検索でPHPickerが見つかったのですが、iOS 14以上から使えるようになった以外は役に立つようで、PHPickerに変えるかどうか考えています.明日PHPickerをもう一度勉強します.