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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

2回答

526閲覧

画像の画面遷移がうまくできません。

Red_Bull

総合スコア19

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

1クリップ

投稿2020/01/24 14:21

UIImagePickerControllerで選択した画像を,画面遷移すると同時にFilterViewControllerに受け渡したいのですが,画像の受け渡しがうまくいきません。
下記のコードで,実行しているつもりなのですが,ViewControllerでprint(filterImage)をしたら画像はオプショナル型で入っていますが、
FilterViewControllerのImageViewは真っ白で、print(filterImage)はnilでした。
何がいけないのかわからず困っております。どなたかよろしくお願いいたします。

ViewController

1class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 2 3 var filterImage: UIImage! 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 @IBAction func openAlbum() { 10 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { 11 let picker = UIImagePickerController() 12 picker.sourceType = .photoLibrary 13 picker.delegate = self 14 picker.allowsEditing = true 15 16 present(picker, animated: true, completion: nil) 17 } 18 } 19 20 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 21 if segue.identifier=="toPhoto"{ 22 let filterViewContoroller = segue.destination as! FilterViewController 23 let cameraImageView = filterViewContoroller.cameraImageView 24 } 25 } 26 27 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 28 filterImage = info[.editedImage] as? UIImage 29 dismiss(animated: true, completion: nil) 30 self.performSegue(withIdentifier: "toPhoto", sender: nil) 31 } 32}

FilterViewController

1class FilterViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 2 3 @IBOutlet var cameraImageView: UIImageView! 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 cameraImageView.image = filterImage 8 } 9 10 override func didReceiveMemoryWarning() { 11 didReceiveMemoryWarning() 12 } 13} 14

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

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

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

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

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

guest

回答2

0

FilterViewControllerのオブジェクトが初期化されたあと`viewWillApperar`/`viewDidAppear`あたりでに~~

1```swift 2cameraImageView.image = filterImage 3``` 4~~してあげてみて~~ 5あー勘違いしてました

投稿2020/01/24 15:37

編集2020/01/24 15:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Red_Bull

2020/01/24 15:42

ご回答ありがとうございます。 ご指摘のようにコードを変更してみたのですが、画像は表示されませんでした... そもそも値渡しができていないのが原因かもしれません????‍♂️
guest

0

ベストアンサー

以下のように修正すればよいのではないかと思います。

ViewController

1 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 2 if segue.identifier=="toPhoto"{ 3 let filterViewContoroller = segue.destination as! FilterViewController 4 let filterImage = filterViewContoroller.filterImage 5 filterImage = self.filterImage // ここで渡す 6 } 7 }

FilterViewController

1var filterImage: UIImageView? // 中間で受け渡すための変数を追加 2override func viewDidLoad() { 3 super.viewDidLoad() 4 cameraImageView.image = filterImage //ここで受け取ったものを反映する。 5 }

投稿2020/01/24 15:28

編集2020/01/24 15:38
eytyet

総合スコア803

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

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

Red_Bull

2020/01/24 15:32

ご回答ありがとうございます。 ご指摘のようにコードを変更してみたのですが、filterImageに画像は表示されませんでした...
eytyet

2020/01/24 15:35

ああそうか、そうですね。すいません。回答を修正します。
eytyet

2020/01/24 15:40 編集

ViewControllerのprepareが実行されたあとで、FilterViewControllerにストーリーボードの設定が反映されて、渡した画像が消されているのだと思います。なので、ストーリーボードと関係ない変数を用意して、ストーリーボードの設定が反映された後で、渡された画像を反映させるようにしたら大丈夫だと思います。
Red_Bull

2020/01/24 15:46

pic: UIImage という変数を追加して pic = filterImage cameraImageView.image = pic にするということでしょうか... (何度も質問してしまいすみません)
eytyet

2020/01/24 15:47

そうです。
Red_Bull

2020/01/24 15:48

そのようにやっても表示されませんでした..
eytyet

2020/01/24 15:50

・picはFilterViewControlerに定義 ・picへの代入は、ViewControllerのprepareの中で実行 ・picからcameraImageView.imageへの代入は、FilterViewControllerのviewDidLoadで実行 としてもダメでした?
Red_Bull

2020/01/24 15:52

そのように実行したら出来ました! 優しく教えてくださり、本当にありがとうございました????????
eytyet

2020/01/24 15:57

よかったです。どのViewControllerにどの変数が属しているのかを意識すると問題を解決できていくようになると思います。 あと老婆心ながら、.editedImageは全部の画像にあるわけではないのでご注意下さい。なかったら.photoを使いましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問