前提・実現したいこと
AVFoundationを使って写真を撮影するアプリを作ったのですが
撮影した写真をその後加工するために一度データ型に保存して
加工後の写真を画面に表示させたいのですが、データ型に保存するやり方、
保存したとしてそれを画面に表示するがわかりません。
該当のソースコード
swift
1class ViewController: UIViewController { 2 // プレビュー用のビューとOutlet接続しておく 3 @IBOutlet weak var previewView: UIView! 4 // インスタンスの作成 5 var session = AVCaptureSession() 6 var photoOutputObj = AVCapturePhotoOutput() 7 // 通知センターを作る 8 let notification = NotificationCenter.default 9 10 var shareImage:UIImage? 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // セッション実行中ならば中断する 15 if session.isRunning { 16 return 17 } 18 // 入出力の設定 19 setupInputOutput() 20 // プレビューレイヤの設定 21 setPreviewLayer() 22 // セッション開始 23 session.startRunning() 24 // デバイスが回転したときに通知するイベントハンドラを設定する 25 notification.addObserver(self, 26 selector: #selector(self.changedDeviceOrientation(_:)), 27 name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil) 28 } 29 30 // シャッターボタンで実行する 31 @IBAction func takePhoto(_ sender: Any) { 32 let captureSetting = AVCapturePhotoSettings() 33 captureSetting.flashMode = .auto 34 captureSetting.isAutoStillImageStabilizationEnabled = true 35 captureSetting.isHighResolutionPhotoEnabled = false 36 // キャプチャのイメージ処理はデリゲートに任せる 37 photoOutputObj.capturePhoto(with: captureSetting, delegate: self) 38 } 39 40 // 入出力の設定 41 func setupInputOutput(){ 42 //解像度の指定 43 session.sessionPreset = AVCaptureSession.Preset.photo 44 45 // 入力の設定 46 do { 47 //デバイスの取得 48 let device = AVCaptureDevice.default( 49 AVCaptureDevice.DeviceType.builtInWideAngleCamera, 50 for: AVMediaType.video, // ビデオ入力 51 position: AVCaptureDevice.Position.back) // バックカメラ 52 53 // 入力元 54 let input = try AVCaptureDeviceInput(device: device!) 55 if session.canAddInput(input){ 56 session.addInput(input) 57 } else { 58 print("セッションに入力を追加できなかった") 59 return 60 } 61 } catch let error as NSError { 62 print("カメラがない (error)") 63 return 64 } 65 66 // 出力の設定 67 if session.canAddOutput(photoOutputObj) { 68 session.addOutput(photoOutputObj) 69 } else { 70 print("セッションに出力を追加できなかった") 71 return 72 } 73 } 74 75 // プレビューレイヤの設定 76 func setPreviewLayer(){ 77 // プレビューレイヤを作る 78 let previewLayer = AVCaptureVideoPreviewLayer(session: session) 79 previewLayer.frame = view.bounds 80 previewLayer.masksToBounds = true 81 previewLayer.videoGravity = AVLayerVideoGravity.resizeAspect 82 // previewViewに追加する 83 previewView.layer.addSublayer(previewLayer) 84 }
試したこと
swift4アプリ開発入門ノートという参考書を読みながら写真を撮影して写真アプリに保存するアプリを作りました。
補足情報(FW/ツールのバージョンなど)
xcode9.2 swift4 iOS13
> 撮った写真を一度画面に表示させたい
と記載されていますが、具体的な点がピンときません。シャッターボタンをタップすると、撮影した静止画を別のウィンドウに表示させ、保存するか否かを判断させるようなことを行いたいのでしょうか。
もう少しご自身が期待する処理について詳細に書き下していただいた方が、回答が得られやすいかと思います。
また、全体の機能のうち、どの部分ができないのかもご提示いただいた方が良いです。さらに「swift4アプリ開発入門ノート」を見ていない方も多いので、その参考書と、貴殿が期待する動作との違いなども付記されるとよろしいかと。
あなたの回答
tips
プレビュー