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

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

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

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

Swift

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

Q&A

解決済

1回答

310閲覧

カメラで撮った写真データの新画面への転送

xinxin

総合スコア16

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/01/02 08:18

編集2019/01/02 08:52

初心者です。
今、Xcodeでカメラのアプリを作ろうとしてます。
カメラは現在多くの人が使っている通信アプリなどで使われているように、写真をとると、撮った写真の確認画面に”撮り直し”または”この写真を使う”などのボタンがついた新しいViewControllerが出て来て、最終的にPOSTを使ってどこかへ発送できるようにしたいです。
現在の段階ではカメラの用意はできています。ただ、写真をとっただけで終わりになり、撮った写真の確認画面さえないです。
そこで、写真を撮ったら自動的に新しいViewControllerに画面遷移し、そこで自分が撮った写真の確認ができるようにしたいです。
それができるためにはどんな関数を使い、どこに挿入すればいいでしょうか。できれば参考でくるサイトをご掲示してくだされば嬉しいです。
お願いします。

カメラのViewControllerのコードは以下になります。

swift

1import UIKit 2import AVFoundation 3 4class SecondViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{ 5 // デバイスからの入力と出力を管理するオブジェクトの作成 6 var captureSession = AVCaptureSession() 7 // カメラデバイスそのものを管理するオブジェクトの作成 8 // メインカメラの管理オブジェクトの作成 9 var mainCamera: AVCaptureDevice? 10 // インカメの管理オブジェクトの作成 11 var innerCamera: AVCaptureDevice? 12 // 現在使用しているカメラデバイスの管理オブジェクトの作成 13 var currentDevice: AVCaptureDevice? 14 // キャプチャーの出力データを受け付けるオブジェクト 15 var photoOutput : AVCapturePhotoOutput? 16 // プレビュー表示用のレイヤ 17 var cameraPreviewLayer : AVCaptureVideoPreviewLayer? 18 19 // シャッターボタン 20 @IBOutlet weak var cameraButton: UIButton! 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 setupCaptureSession() 25 setupDevice() 26 setupInputOutput() 27 setupPreviewLayer() 28 captureSession.startRunning() 29 styleCaptureButton() 30 // Do any additional setup after loading the view, typically from a nib. 31 } 32 33 override func didReceiveMemoryWarning() { 34 super.didReceiveMemoryWarning() 35 // Dispose of any resources that can be recreated. 36 } 37 38 /// 撮影ボタン押下時に呼ばれる 39 @IBAction func cameraButton_TouchUpInside(_ sender: Any) { 40 41 let settings = AVCapturePhotoSettings() 42 // フラッシュの設定 43 settings.flashMode = .auto 44 // カメラの手ぶれ補正 45 settings.isAutoStillImageStabilizationEnabled = true 46 // 撮影された画像をdelegateメソッドで処理 47 self.photoOutput?.capturePhoto(with: settings, delegate: self as! AVCapturePhotoCaptureDelegate) 48 } 49} 50 51//MARK: AVCapturePhotoCaptureDelegateデリゲートメソッド 52extension SecondViewController: AVCapturePhotoCaptureDelegate{ 53 // 撮影した画像データが生成されたときに呼び出されるデリゲートメソッド 54 func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { 55 if let imageData = photo.fileDataRepresentation() { 56 // Data型をUIImageオブジェクトに変換 57 let uiImage = UIImage(data: imageData) 58 // 写真ライブラリに画像を保存 59 UIImageWriteToSavedPhotosAlbum(uiImage!, nil,nil,nil) 60 } 61 } 62} 63 64//MARK: カメラ設定メソッド 65extension SecondViewController{ 66 // カメラの画質の設定 67 func setupCaptureSession() { 68 captureSession.sessionPreset = AVCaptureSession.Preset.photo 69 } 70 71 // デバイスの設定 72 func setupDevice() { 73 // カメラデバイスのプロパティ設定 74 let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera], mediaType: AVMediaType.video, position: AVCaptureDevice.Position.unspecified) 75 // プロパティの条件を満たしたカメラデバイスの取得 76 let devices = deviceDiscoverySession.devices 77 78 for device in devices { 79 if device.position == AVCaptureDevice.Position.back { 80 mainCamera = device 81 } else if device.position == AVCaptureDevice.Position.front { 82 innerCamera = device 83 } 84 } 85 // 起動時のカメラを設定 86 currentDevice = mainCamera 87 } 88 89 // 入出力データの設定 90 func setupInputOutput() { 91 do { 92 // 指定したデバイスを使用するために入力を初期化 93 let captureDeviceInput = try AVCaptureDeviceInput(device: currentDevice!) 94 // 指定した入力をセッションに追加 95 captureSession.addInput(captureDeviceInput) 96 // 出力データを受け取るオブジェクトの作成 97 photoOutput = AVCapturePhotoOutput() 98 // 出力ファイルのフォーマットを指定 99 photoOutput!.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey : AVVideoCodecType.jpeg])], completionHandler: nil) 100 captureSession.addOutput(photoOutput!) 101 } catch { 102 print(error) 103 } 104 } 105 106 // カメラのプレビューを表示するレイヤの設定 107 func setupPreviewLayer() { 108 // 指定したAVCaptureSessionでプレビューレイヤを初期化 109 self.cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 110 // プレビューレイヤが、カメラのキャプチャーを縦横比を維持した状態で、表示するように設定 111 self.cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill 112 // プレビューレイヤの表示の向きを設定 113 self.cameraPreviewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait 114 115 self.cameraPreviewLayer?.frame = view.frame 116 117 self.view.layer.insertSublayer(self.cameraPreviewLayer!, at: 0) 118 } 119 // ボタンのスタイルを設定 120 func styleCaptureButton() { 121 cameraButton.layer.borderColor = UIColor.white.cgColor 122 cameraButton.layer.borderWidth = 5 123 124 cameraButton.clipsToBounds = true 125 cameraButton.layer.cornerRadius = min(cameraButton.frame.width, cameraButton.frame.height) / 2 126 } 127} 128

ちなみにカメラのコードは以下のサイトを参考にしました。
リンク内容

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

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

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

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

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

bochan2

2019/01/02 08:45

よく頑張りましたね 書いたコードを載せていただけると解決の役に立つと思います
xinxin

2019/01/02 08:48

わかりました!ありがとうございます。
guest

回答1

0

ベストアンサー

以下のサイトが参考になると思います。

photoOutputで取得したImageを上記URLの様に新しいViewControllerへセットしてあげればよいと考えます。

投稿2019/01/03 07:17

nakasho_dev

総合スコア2655

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問