AVCaptureSession с помощью Singleton. Как управлять?

#ios #swift #singleton #avfoundation #avcapturesession

#iOS #swift #синглтон #avfoundation #avcapturesession

Вопрос:

Итак, ребята, поскольку у меня есть несколько представлений и несколько кнопок масштабирования, которые мне нужны для изменения вывода камеры предварительного просмотра, я думаю, что будет правильно использовать Singleton для инициализации сеанса, но я понятия не имею, как это сделать, и не могу найти никакой полезной информации, может кто-нибудь мне помочь, пожалуйста?

Комментарии:

1. Создайте класс с помощью singleton и создайте свойство для AVCaptureSession . Вы даже можете использовать это krakendev.io/blog/the-right-way-to-write-a-singleton чтобы создать синглтон.

Ответ №1:

Обновить

хорошо, итак, мне каким-то образом удалось это написать, я не знаю, все ли в порядке, вот код:

 protocol Singleton: class {
static var sharedInstance: Self { get }
}


final class AVFSessionSingleton: Singleton {
static let sharedInstance = AVFSessionSingleton()
private init() {
    session = newVideoCaptureSession()!
}


var session: AVCaptureSession!
var imageOutput : AVCaptureStillImageOutput?

//FUNCTION

func newVideoCaptureSession () -> AVCaptureSession? {

    func initCaptureDevice() -> AVCaptureDevice? {
        var captureDevice: AVCaptureDevice?
        let devices: NSArray = AVCaptureDevice.devices() as NSArray

        for device: Any in devices {
            if (device as AnyObject).position == AVCaptureDevicePosition.back {
                captureDevice = device as? AVCaptureDevice
            }
        }
        print("device inited")
        return captureDevice
    }

    func initOutput() {
        self.imageOutput = AVCaptureStillImageOutput()
    }

    func initInputDevice(captureDevice : AVCaptureDevice) -> AVCaptureInput? {
        var deviceInput : AVCaptureInput?
        do {
            deviceInput = try AVCaptureDeviceInput(device: captureDevice)
        }
        catch _ {
            deviceInput = nil
        }
        return deviceInput
    }

    func initSession(deviceInput: AVCaptureInput) {
        self.session = AVCaptureSession()
        self.session?.sessionPreset = AVCaptureSessionPresetPhoto
        self.session?.addInput(deviceInput)
        self.session?.addOutput(self.imageOutput!)
    }

    return session
 }

}
  

Итак, теперь я хочу назвать это так, чтобы я мог управлять макетами для предварительного просмотра, какие-либо предложения, пожалуйста?….