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

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

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

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

Q&A

解決済

3回答

2272閲覧

Swiftでの画面遷移について

kazzzstudio

総合スコア94

Swift

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

0グッド

0クリップ

投稿2016/10/10 22:57

編集2016/10/11 02:37

イタリックテキストいつもお世話になっております。

Swift3での画面遷移でうまく動かないので質問させてください。
やりたいことは、Photoボタンが押された後にUIImagePickerを使ってカメラを起動し、
カメラから Use Photoが押されたときにimagePickerController関数を実行すると
いうものです。

delegateでselfを指定しているので、勝手?に呼び出されると思うのですが、どうやら
呼び出されていないようです。

デバッグ用にprint文でコンソールに出力するようにしてみましたが、"aaa"は出力され
ますが、"bbb"は出力されません。

なにか根本的に間違っていると思うのですが、調査するのにとっかかりが掴めずにいます。

なにかアドバイスをいただけないでしょうか?
よろしくお願いします。

Swift3

1 // Photoボタンが押されたときの処理 2 // カメラを起動する 3 @IBAction func photoButton(_ sender: AnyObject) { 4 let camera = UIImagePickerControllerSourceType.camera 5 6 if UIImagePickerController.isSourceTypeAvailable(camera) { 7 let picker = UIImagePickerController() 8 9 picker.sourceType = camera 10 picker.delegate = self 11 12 present(picker, animated: true, completion: nil) 13 } 14 15 } 16 17 // カメラからUse Photoが選択された場合に返ってくる関数を定義 18 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) { 19 let image = info[UIImagePickerControllerOriginalImage] as! UIImage 20 21 print("aaa") 22 self.dismiss(animated: true, completion: nil) 23 24 // 遷移するViewを定義する. 25 let resultViewController: UIViewController = ResultViewController() 26 // アニメーションを設定する. 27 resultViewController.modalTransitionStyle = UIModalTransitionStyle.partialCurl 28 // Viewを移動する. 29 self.present(resultViewController, animated: true, completion: nil) 30 31 } 32

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

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

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

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

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

guest

回答3

0

自己解決

とりあえず、自己解決しました。

下記のように書き換えたところ、うまく動くようになりました(画面遷移はできていません)。

【修正前のコード】
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject])

【修正後のコード】
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])

Swiftのバージョンが3になったことに起因しているのかわかりませんが、どうやら上記のように書く必要があるみたいです。
ご回答いただいた方々、ありがとうございました。

投稿2016/10/11 02:55

kazzzstudio

総合スコア94

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

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

_Kentarou

2016/10/11 03:29

解決したようでよかったですが、私のコードもそのように記載されています。 こちらもXcode8,Swift3で確認した動くコードを載せました、回答はちゃんと確認みてください。
kazzzstudio

2016/10/11 03:30

見過ごしていました。申し訳ありませんでした。
guest

0

頭についているprivateを削除して下さい。

投稿2016/10/11 00:06

fuzzball

総合スコア16731

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

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

kazzzstudio

2016/10/11 00:13

ご回答、ありがとうございます。 試してみましたが、やっぱりうまくいかないようです。
fuzzball

2016/10/11 00:22

質問内のコードを最新の状態にして下さい。
kazzzstudio

2016/10/11 02:38

ソースコードを最新の状態にしました。
guest

0

以下のコードで写真の取得はできます、確認してみてください。

swift

1mport UIKit 2 3class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 @IBAction func showImagePicker(sender: UIButton) { 10 11 let sourceType:UIImagePickerControllerSourceType = UIImagePickerControllerSourceType.photoLibrary 12 13 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { 14 let imagePicker = UIImagePickerController() 15 imagePicker.sourceType = sourceType 16 imagePicker.delegate = self 17 imagePicker.allowsEditing = true 18 present(imagePicker, animated: true, completion: nil) 19 } else { 20 print("Not Available") 21 } 22 } 23 24 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 25 26 // 選択された画像 27 let image = info[UIImagePickerControllerOriginalImage] as? UIImage 28 print(image) 29 self.dismiss(animated: true, completion: nil) 30 } 31 32 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 33 dismiss(animated: true, completion: nil) 34 } 35}

投稿2016/10/10 23:31

編集2016/10/11 00:16
_Kentarou

総合スコア8490

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

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

kazzzstudio

2016/10/10 23:42

ご回答、ありがとうございます。 しかし、試してみましたが、未だ imagePickerController関数が呼び出されないようです。
_Kentarou

2016/10/11 00:16

落ちるわけでは無いですか?
_Kentarou

2016/10/11 00:18

そもそも呼ばれても画面遷移を書く場所に問題はあります(画面遷移しません。) 選択したところで画面は閉じ遷移元画面に戻ってから画面遷移してください。
kazzzstudio

2016/10/11 02:35

プログラムは落ちるわけではないです。 最初の(呼び出し元の)画面に戻ってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問