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

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

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

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

Swift

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

Q&A

解決済

1回答

1014閲覧

swiftのカメラのdismiss()について

mana_mana419

総合スコア27

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/07/16 04:48

swiftで今カメラアプリを作っているのですが、参考書やネットなどを読んで作っている中で何故このコードがあるのか?というところがあったため質問させていただきたいです。

swift

1import UIKit 2import Photos 3 4class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 5 6 7 @IBOutlet var backImageView: UIImageView! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 PHPhotoLibrary.requestAuthorization { (status) in 13 14 15 switch(status){ 16 case .authorized: 17 print("Authorize") 18 case .denied: 19 print("deny") 20 case .notDetermined: 21 print("NotDetermined") 22 case .restricted: 23 print("Restricted") 24 @unknown default: 25 fatalError("sorry") 26 } 27 28 } 29 30 31 } 32 33 @IBAction func openCamera(_ sender: Any) { 34 let souceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.camera 35 36 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera){ 37 38 let cameraPicker = UIImagePickerController() 39 cameraPicker.sourceType = souceType 40 cameraPicker.delegate = self 41 self.present(cameraPicker,animated:true,completion: nil ) 42 } 43 } 44 45 46 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 47 48 let pickedImage = info[.originalImage] as! UIImage 49 50 backImageView.image = pickedImage 51 UIImageWriteToSavedPhotosAlbum(pickedImage, nil, nil, nil) 52 picker.dismiss(animated: true, completion: nil) 53 54 } 55 56 57 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 58 picker.dismiss(animated: true, completion: nil) 59 60 } 61 62 63 64 @IBAction func openAlbum(_ sender: Any) { 65 66 let souceType:UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 67 68 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 69 70 let cameraPicker = UIImagePickerController() 71 cameraPicker.sourceType = souceType 72 cameraPicker.delegate = self 73 self.present(cameraPicker,animated:true,completion: nil ) 74 75 76 } 77} 78 79 80 @IBAction func share(_ sender: Any) { 81 82 let text = "" 83 let url = NSURL(string:"http://www.apple.com") 84 85 let items = [text,url,backImageView.image] as [Any] 86 87 let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil) 88 89 self.present(activityVC,animated: true,completion: nil) 90 } 91 92}

上のコードで

swift

1func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 2 3 let pickedImage = info[.originalImage] as! UIImage 4 5 backImageView.image = pickedImage 6 UIImageWriteToSavedPhotosAlbum(pickedImage, nil, nil, nil) 7 picker.dismiss(animated: true, completion: nil) 8 9 }

という箇所と

swift

1func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 2 picker.dismiss(animated: true, completion: nil) 3 4 }

という箇所があり、前者も後者もpicker.dismiss(animated:true,completion:nil)があります。
後者のこのコードを含むところを書く前と、書かない時の処理が全く同じで何故必要なのか?
コード全体を通しても理解できませんでした。
なので何故この後者のコードがあるのかわかる方がもしいらっしゃいましたら是非教えていただきたいです。
上手くまとめられずわかりづらくてすいません。。。

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

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

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

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

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

guest

回答1

0

ベストアンサー

選択したときとキャンセルしたときの処理です。

投稿2019/07/16 04:51

fuzzball

総合スコア16731

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

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

mana_mana419

2019/07/16 05:06

迅速に教えていただきありがとうございます! 教えていただいたことを踏まえ後者のimagePickerControllerDidCancel()のメソッドを入れた状態、無い状態でテストしてみたのですがどちらも撮った写真の選択をキャンセルすることができました。 このメソッドはもしかしてなくてもよいものなのでしょうか?
fuzzball

2019/07/16 05:44

ちょっと動作検証してみましたが、imagePickerControllerDidCancel(_:)を実装しなかった場合は勝手に閉じるようですね。なので、閉じる処理しか必要ない場合は実装しなくて良さそうです。 なお、imagePickerControllerDidCancel(_:)を実装した場合は勝手に閉じてくれないので、dismiss(animated:completion:)を呼ぶ必要があります。
mana_mana419

2019/07/16 06:04

検証までしていただき正確なアドバイスを下さりありがとうございました! モヤモヤしていたためとてもスッキリしました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問