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

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

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

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

Q&A

解決済

1回答

1033閲覧

別の画像を表示させたいのですが…

R3.S

総合スコア44

Swift

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

0グッド

0クリップ

投稿2019/07/07 07:31

同画面にアルバムを呼び出す画面を2箇所使って別々の画像を表示させたいと思っています。別の画像を表示させたいのですが…同じのが出てしまいます。

swift

1import UIKit 2import Photos 3 4class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 5 6 7 @IBOutlet var back1: UIImageView! 8 9 @IBOutlet var back2: UIImageView! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 PHPhotoLibrary.requestAuthorization { (status) in 15 16 switch(status){ 17 case .authorized: break 18 case .denied: break 19 case .notDetermined: break 20 case .restricted: break 21 22 } 23 } 24 25 26 } 27 28 func imagePickerController(_ picker: UIImagePickerController, 29 didFinishPickingMediaWithInfo info: 30 [UIImagePickerController.InfoKey : Any]) { 31 32 if let pickedImage = info[.originalImage] as? UIImage 33 { 34 back1.image = pickedImage 35 picker.dismiss(animated: true, completion: nil) 36 37 back2.image = pickedImage 38 picker.dismiss(animated: true, completion: nil) 39 } 40 } 41 42 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 43 44 picker.dismiss(animated: true, completion: nil) 45 } 46 47 48 //カメラ1を呼び出す 49 @IBAction func camera1(_ sender: Any) { 50 let 51 sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.camera 52 if 53 UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera){ 54 let 55 cameraPicker = UIImagePickerController() 56 cameraPicker.sourceType = sourceType 57 cameraPicker.delegate = self 58 self.present(cameraPicker, animated: true, completion: nil) 59 } 60 } 61 62 //カメラ2を呼び出す 63 @IBAction func camera2(_ sender: Any) { 64 let 65 sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 66 if 67 UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera){ 68 let 69 cameraPicker = UIImagePickerController() 70 cameraPicker.sourceType = sourceType 71 cameraPicker.delegate = self 72 self.present(cameraPicker, animated: true, completion: nil) 73 } 74 } 75 76 //アルバム1を呼び出す 77 @IBAction func album1(_ sender: Any) { 78 let 79 sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 80 if 81 UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 82 let 83 cameraPicker = UIImagePickerController() 84 cameraPicker.sourceType = sourceType 85 cameraPicker.delegate = self 86 self.present(cameraPicker, animated: true, completion: nil) 87 } 88 } 89 90 //アルバム2を呼び出す 91 @IBAction func album2(_ sender: Any) { 92 let 93 sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 94 if 95 UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 96 let 97 cameraPicker = UIImagePickerController() 98 cameraPicker.sourceType = sourceType 99 cameraPicker.delegate = self 100 self.present(cameraPicker, animated: true, completion: nil) 101 } 102 } 103 104 105} 106

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

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

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

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

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

guest

回答1

0

ベストアンサー

UIImagePickerControllerDelegate の delegateメソッドで
どちらのPickerかを区別できないため同じ画像が設置されるようです。
プロパティを宣言するかtagを使うことで解決できそうです。(前者はこんな感じ)

swift

1let firstPicker = UIImagePickerController() 2let secondPicker = UIImagePickerController() 3 4// 略 5 6//アルバム1を呼び出す 7@IBAction func album1(_ sender: Any) { 8 let sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 9 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 10 // すでに宣言したプロパティを使用 11 self.firstPicker.sourceType = sourceType 12 self.firstPicker.delegate = self 13 self.present(self.firstPicker, animated: true, completion: nil) 14 } 15} 16 17//アルバム2を呼び出す 18@IBAction func album2(_ sender: Any) { 19 let sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 20 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 21 // すでに宣言したプロパティを使用 22 self.secondPicker.sourceType = sourceType 23 self.secondPicker.delegate = self 24 self.present(self.secondPicker, animated: true, completion: nil) 25 } 26}

最後に delegate メソッド内でどのピッカーかを区別する条件文を実装。

swift

1func imagePickerController(_ picker: UIImagePickerController, 2 didFinishPickingMediaWithInfo info: 3 [UIImagePickerController.InfoKey : Any]) { 4 5 if let pickedImage = info[.originalImage] as? UIImage { 6 // ピッカーの種類がどちらかを判定する 7 if(picker == self.firstPicker) { 8 back1.image = pickedImage 9 } else if(picker == self.secondPicker) { 10 back2.image = pickedImage 11 } else { 12 // 何か処理があれば記載 13 } 14 picker.dismiss(animated: true, completion: nil) 15 } 16}

タグを使う後者だと下記のようになります。

swift

1//アルバム1を呼び出す(tagは1) 2@IBAction func album1(_ sender: Any) { 3 let sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 4 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 5 let cameraPicker = UIImagePickerController() 6 cameraPicker.view.tag = 1 // Viewにタグを付与 7 cameraPicker.sourceType = sourceType 8 cameraPicker.delegate = self 9 self.present(cameraPicker, animated: true, completion: nil) 10 } 11} 12 13//アルバム2を呼び出す(tagは2) 14@IBAction func album2(_ sender: Any) { 15 let sourceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 16 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 17 let cameraPicker = UIImagePickerController() 18 cameraPicker.view.tag = 2 // Viewにタグを付与 19 cameraPicker.sourceType = sourceType 20 cameraPicker.delegate = self 21 self.present(cameraPicker, animated: true, completion: nil) 22 } 23} 24 25func imagePickerController(_ picker: UIImagePickerController, 26 didFinishPickingMediaWithInfo info: 27 [UIImagePickerController.InfoKey : Any]) { 28 29 if let pickedImage = info[.originalImage] as? UIImage { 30 // Viewに付与したtagを用いてどちらのピッカーかを判別する 31 if(picker.view.tag == 1) { 32 back1.image = pickedImage 33 } else if(picker.view.tag == 2) { 34 back2.image = pickedImage 35 } else { 36 // 何かあれば記載 37 } 38 picker.dismiss(animated: true, completion: nil) 39 } 40}

動作確認まではできていないですが,どちらかの方法でいかがでしょうか?

投稿2019/07/07 09:02

編集2019/07/07 09:05
TakuyaAso

総合スコア1361

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問