AVCam项目在iPad上崩溃

Mat*_*ong 10 objective-c avfoundation ipad avcam swift

Apple的AVCam演示应用程序的演示源代码可在此处找到:https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.html在尝试拍照时崩溃(无论您是否构建了目标-C(或Swift版本)在AVCamCameraViewController/CameraViewController(Swift)线上拍摄照片:

[self.photoOutput capturePhotoWithSettings:photoSettings delegate:photoCaptureDelegate];
Run Code Online (Sandbox Code Playgroud)

或(斯威夫特)

self.photoOutput.capturePhoto(with: photoSettings, delegate: photoCaptureDelegate)
Run Code Online (Sandbox Code Playgroud)

崩溃时的错误消息是:

2016-11-21 17:44:31.590070 AVCam [2178:2303627] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [AVCapturePhotoOutput capturePhotoWithSettings:delegate:] flashMode必须设置为supportedFlashModes中存在的值阵"

当我检查闪存模式数组时,我得到了这个:

(lldb)po [self.photoOutput supportedFlashModes] <__ NSSingleObjectArrayI 0x170007c50>(0)

因此,为了添加闪存模式,文档说您必须指定要在AVCapturePhotoSettings对象中支持的模式.我用这行代码完成了这个:

photoSettings.flashMode = AVCaptureFlashModeAuto;
Run Code Online (Sandbox Code Playgroud)

或(斯威夫特)

photoSettings.flashMode = .auto
Run Code Online (Sandbox Code Playgroud)

所以我的预感是,这是一个特别与12.9"iPad Pro有关的错误,我可能需要提交一个雷达,但我想我会问这里,万一有人以前见过它.有什么想法吗?

更新

我也能够复制其他iPad,所以它似乎不仅仅是12.9英寸的iPad Pro.

Soj*_*oja 10

添加这个......

let position = self.videoDeviceInput.device.position
photoSettings.flashMode = position == .front || position == .unspecified ? .off : .auto
Run Code Online (Sandbox Code Playgroud)

就在此之前......

self.photoOutput.capturePhoto(with: photoSettings, delegate: photoCaptureDelegate)
Run Code Online (Sandbox Code Playgroud)

这应该解决问题.