在我的swift
应用中,我允许用户拍照。
为此,我决定从这里使用CameraManager
:https://github.com/imaginary-cloud/CameraManager
当用户打开我的应用程序时,他会看到一个按钮 - 当他按下按钮时,会出现相机视图,他可以拍照。他也可以关闭相机视图,稍后再按一下按钮再次打开相机视图。
如果我从插件文档中正确理解它,我需要在第一次使用时向我的视图添加一个摄像头视图,然后 - 如果被忽略 - 调用stopCaptureSession()
,并在每次下一次使用调用期间{{1 }}
目前在我的resumeCaptureSession()
代码中,我有三种方法:
swift
按钮的let cameraManager = CameraManager()
fileprivate func addCameraToView()
{
cameraManager.addPreviewLayerToView(cameraView, newCameraOutputMode: CameraOutputMode.stillImage)
}
fileprivate func stopCaptureSession() {
cameraManager.stopCaptureSession()
}
fileprivate func resumeCaptreSession() {
cameraManager.resumeCaptureSession()
}
具有以下代码:
IBAction
并且在let currentCameraState = cameraManager.currentCameraStatus()
if currentCameraState == .notDetermined {
cameraManager.askUserForCameraPermission({ permissionGranted in
if permissionGranted {
self.resumeCaptreSession()
}
})
} else if (currentCameraState == .ready) {
self.resumeCaptreSession()
} else {
print("we do not have access to camera")
}
的解雇按钮中我有:
IBAction
为了让它正常工作,我需要提前调用 print("cancelling camera")
stopCaptureSession()
- 直到现在我在addCameraToView()
添加它,但我意识到我不能这样做,因为这样做 - 相机停留在用户按下viewDidLoad
按钮之前有效。
所以我考虑在dismiss
更改我的相机按钮代码并从那里添加相机。但是,我必须添加它,以防它之前没有添加 - 在另一种情况下我需要调用IBAction
。
问题是在resumeCaptureSession()
中,负责将视频添加到视图的函数声明如下:
CameraManager
和open func addPreviewLayerToView(_ view: UIView, newCameraOutputMode: CameraOutputMode) -> CameraState {
return addLayerPreviewToView(view, newCameraOutputMode: newCameraOutputMode, completion: nil)
}
open func addLayerPreviewToView(_ view: UIView, newCameraOutputMode: CameraOutputMode, completion: ((Void) -> Void)?) -> CameraState {
if _canLoadCamera() {
if let _ = embeddingView {
if let validPreviewLayer = previewLayer {
validPreviewLayer.removeFromSuperlayer()
}
}
if cameraIsSetup {
_addPreviewLayerToView(view)
cameraOutputMode = newCameraOutputMode
if let validCompletion = completion {
validCompletion()
}
} else {
_setupCamera({ Void -> Void in
self._addPreviewLayerToView(view)
self.cameraOutputMode = newCameraOutputMode
if let validCompletion = completion {
validCompletion()
}
})
}
}
return _checkIfCameraIsAvailable()
}
的定义如下:
resumeCaptureSession()
所以我的问题是 - 当用户打开相机视图时,如何检查相机是否已添加到视图中,如果已添加 - 请致电open func resumeCaptureSession() {
if let validCaptureSession = captureSession {
if !validCaptureSession.isRunning && cameraIsSetup {
validCaptureSession.startRunning()
_startFollowingDeviceOrientation()
}
} else {
if _canLoadCamera() {
if cameraIsSetup {
stopAndRemoveCaptureSession()
}
_setupCamera({Void -> Void in
if let validEmbeddingView = self.embeddingView {
self._addPreviewLayerToView(validEmbeddingView)
}
self._startFollowingDeviceOrientation()
})
}
}
}
,否则请不要调用它,只需将其保留打电话给resumeCaptureSession()
?