Review the RotationViewController super class, it contains all the elements for adding the PassioNutritionAISDK to a view controller.
Note: If you use the SDK only in one view you could move all the code from viewDidAppear to viewWillAppear.
This sample also contains code to support device rotations.
import UIKit
import AVFoundation
import PassioNutritionAISDK
class RotationViewController: UIViewController {
let passioSDK = PassioNutritionAI.shared
var volumeDetectionMode = VolumeDetectionMode.auto
var videoLayer: AVCaptureVideoPreviewLayer?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self,
selector: #selector(deviceRotated),
name: UIDevice.orientationDidChangeNotification,
object: nil)
if AVCaptureDevice.authorizationStatus(for: .video) == .authorized { // already authorized
setupVideoLayer()
startDetection()
} else {
AVCaptureDevice.requestAccess(for: .video) { (granted) in
if granted { // access to video granted
DispatchQueue.main.async {
self.setupVideoLayer()
self.startDetection()
}
} else {
print("The user didn't grant access to use camera")
}
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
backgroundImage.fadeIn(seconds: 0.2)
NotificationCenter.default.removeObserver(self,
name: UIDevice.orientationDidChangeNotification,
object: nil)
stopDetection()
videoLayer?.removeFromSuperlayer()
videoLayer = nil
passioSDK.removevideoLayer()
}
func startDetection() {
}
func stopDetection() {
}
func setupVideoLayer() {
guard videoLayer == nil else { return }
print("setupVideoLayer volumeDetectionMode == \(volumeDetectionMode)" )
if let vLayer = passioSDK.getPreviewLayerWithGravity(volumeDetectionMode: volumeDetectionMode,
videoGravity: .resizeAspectFill) {
videoLayer = vLayer
vLayer.frame = view.bounds
view.layer.insertSublayer(vLayer, at: 0)
}
}
}