環境
Xcode:9.2
Swift:4.0
問題点
タイトルの通り,iPhoneではフォトライブラリーは開くのに、iPadで全く同じコードで行ってもフォトライブラリーが開きません。以下にコードを載せます。
コード
MainVC.swiftに置いてある、アルバムを開くボタンをタップした時に呼ばれる処理
Swift
1//MainVC.swift 2@IBAction func OpenAlbum(_ sender: UIButton) { 3 4 //アルバムを開く 5 self.photoLibraryManager.callPhotoLibrary() 6 7 }
その際に呼ばれるPhotoLibraryManager.swiftのコード
Swift
1//PhotoLibraryManager.swift 2import Photos 3 4struct PhotoLibraryManager{ 5 6 var parentViewController : UIViewController! 7 8 init(parentViewController: UIViewController){ 9 self.parentViewController = parentViewController 10 } 11 12 // 写真へのアクセスがOFFのときに使うメソッド 13 func requestAuthorizationOn(){ 14 // authorization 15 let status = PHPhotoLibrary.authorizationStatus() 16 17 if (status == PHAuthorizationStatus.denied) { 18 19 //アラートビューで設定変更するかしないかを聞く 20 let alert = UIAlertController(title: "写真へのアクセスを許可", 21 message: "写真へのアクセスを許可する必要があります。設定を変更してください。", 22 preferredStyle: .alert) 23 let settingsAction = UIAlertAction(title: "設定変更", style: .default) { (_) -> Void in 24 guard let _ = URL(string: UIApplicationOpenSettingsURLString ) else { 25 return 26 } 27 } 28 alert.addAction(settingsAction) 29 alert.addAction(UIAlertAction(title: "キャンセル", style: .cancel) { _ in 30 // ダイアログがキャンセルされた。つまりアクセス許可は得られない。 31 }) 32 self.parentViewController.present(alert, animated: true) 33 } 34 } 35 36 func callPhotoLibrary(){ 37 //権限の確認 38 requestAuthorizationOn() 39 40 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 41 let picker = UIImagePickerController() 42 picker.modalPresentationStyle = UIModalPresentationStyle.popover 43 picker.delegate = self.parentViewController as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 44 picker.sourceType = UIImagePickerControllerSourceType.photoLibrary 45 46 if let popover = picker.popoverPresentationController { 47 popover.sourceView = self.parentViewController.view 48 popover.sourceRect = self.parentViewController.view.frame 49 // ポップオーバーの表示元となるエリア 50 popover.permittedArrowDirections = UIPopoverArrowDirection.any 51 } 52 self.parentViewController.present(picker, animated: true, completion: nil) 53 } 54 } 55} 56 57
エラーなどは何も出ずどうしたらいいのかわからない状態です。
iPadでもフォロライブラリーを開けるように解決策を教えていただきたいです。
参考にしたサイト
https://qiita.com/tetsufe/items/9ff5fe190ee190afa1bb
追記
Swift
1//PhotoLibraryManager.swift 2import Photos 3 4struct PhotoLibraryManager{ 5 6 var parentViewController : UIViewController! 7 8 init(parentViewController: UIViewController){ 9 self.parentViewController = parentViewController 10 } 11 12 // 写真へのアクセスがOFFのときに使うメソッド 13 func requestAuthorizationOn(){ 14 // authorization 15 let status = PHPhotoLibrary.authorizationStatus() 16 17 if (status == PHAuthorizationStatus.denied) { 18 19 //アラートビューで設定変更するかしないかを聞く 20 let alert = UIAlertController(title: "写真へのアクセスを許可", 21 message: "写真へのアクセスを許可する必要があります。設定を変更してください。", 22 preferredStyle: .alert) 23 let settingsAction = UIAlertAction(title: "設定変更", style: .default) { (_) -> Void in 24 guard let _ = URL(string: UIApplicationOpenSettingsURLString ) else { 25 return 26 } 27 } 28 alert.addAction(settingsAction) 29 alert.addAction(UIAlertAction(title: "キャンセル", style: .cancel) { _ in 30 // ダイアログがキャンセルされた。つまりアクセス許可は得られない。 31 }) 32 self.parentViewController.present(alert, animated: true) 33 } 34 } 35 36 func callPhotoLibrary(){ 37 //権限の確認 38 requestAuthorizationOn() 39 40 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 41 let picker = UIImagePickerController() 42/* 43 picker.modalPresentationStyle = UIModalPresentationStyle.popover 44 picker.delegate = self.parentViewController as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 45 picker.sourceType = UIImagePickerControllerSourceType.photoLibrary 46 47 if let popover = picker.popoverPresentationController { 48 popover.sourceView = self.parentViewController.view 49 popover.sourceRect = self.parentViewController.view.frame 50 // ポップオーバーの表示元となるエリア 51 popover.permittedArrowDirections = UIPopoverArrowDirection.any 52 }*/ 53 self.parentViewController.present(picker, animated: true, completion: nil) 54 } 55 } 56}
PhotoLibraryManager.swiftをこのようにした結果フォトライブラリーは開くようになりました。
解決したのであれば質問をcloseして下さい
あなたの回答
tips
プレビュー