Swift: Version 5.1.3
XCode: Version 11.3.1
こんにちは。
Navigation Controllerで繋がっている2つのViewControllerがあります。
ViewController1にはカメラのプレビュー(AVCaptureVideoPreviewLayer)があり、ボタンが押されたと同時に、シャッターを切り、ViewController2に移動します。
しかし、NavigationBarにある、Backボタンを押し、ViewController1に戻ると、カメラのプレビューの部分が画像になってしまい、アプリをシャットダウンしない限り、写真を取り直すことができません。
ViewController1のカメラのプレビューを起動し、撮影するまでのコードはこのようになっています。
Swift
1 override func viewDidLayoutSubviews() { 2 //Set the frame of preview to make it same as cameraview 3 previewLayer?.frame = cameraView.bounds 4 } 5 6 // Called befor the screen is loaded 7 override func viewWillAppear(_ animated: Bool) { 8 setPreview() 9 } 10 11 func setPreview() { 12 // Initialize session and output 13 session = AVCaptureSession() 14 output = AVCapturePhotoOutput() 15 16 // Resolution setting 17 //session.sessionPreset = AVCaptureSessionPreset1920x1080 18 session.sessionPreset = AVCaptureSession.Preset.hd1920x1080 19 20 let camera = AVCaptureDevice.default(for: AVMediaType.video) 21 22 do { 23 // input camera to device 24 let input = try AVCaptureDeviceInput(device: camera!) 25 26 // Input 27 if (session.canAddInput(input)) { 28 session.addInput(input) 29 30 // Output 31 if (session.canAddOutput(output!)) { 32 session.addOutput(output!) 33 34 // Run camera 35 session.startRunning() 36 37 // Generate Preview 38 previewLayer = AVCaptureVideoPreviewLayer(session: session) 39 40 // Dont't change aspect ratio 41 previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill 42 43 // Add preview 44 self.cameraView.layer.addSublayer(previewLayer!) 45 } 46 } 47 } catch { 48 print(error) 49 } 50 } 51 52 @IBAction func ScanTapped(_ sender: Any) { 53 // Camera setting 54 let settingsForMonitoring = AVCapturePhotoSettings() 55 settingsForMonitoring.flashMode = .off 56 settingsForMonitoring.isHighResolutionPhotoEnabled = false = 57 58 // Shoot 59 output?.capturePhoto(with: settingsForMonitoring, delegate: self) 60 }
クラス内の変数を全てnilにすると解決するかと思ったのですが、解決しませんでした。
解決方法ご存知のたかいましたらご教授お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。