質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1476閲覧

【Swift】iPadでフォトライブラリーが開かない

kimkim

総合スコア142

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/05/01 06:49

編集2018/05/01 13:24

環境

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をこのようにした結果フォトライブラリーは開くようになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/05/07 00:41

解決したのであれば質問をcloseして下さい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問