AVCaptureSession与UIImagePickerController的速度

时间:2015-04-23 09:56:40

标签: ios objective-c swift uiimagepickercontroller avcapturesession

目前我在UIImagePickerController上使用自定义叠加层,呼叫takePicture()以捕获图像。但是,调用委托方法didFinishPickingMediaWithInfo需要几秒钟的时间。我听说过用AVCaptureSession来控制相机。这会让我获得更快的拍照速度(类似于Snapchat)吗?或者还有其他方法可以

由于

修改

我正在实施我的图像捕捉,如下所示。

首先,我使用名为CustomCameraOverlayView的UIView子类为覆盖视图初始化UIImagePickerController,并将其呈现在模态视图中。 CustomCameraOverlayView的代表设置为UIImagePickerControllerDelegate(自我),以便我可以从takePicture致电CustomCameraOverlayView

imagePickerController = UIImagePickerController()
    if UIImagePickerController.isSourceTypeAvailable(.Camera) {
        imagePickerController.sourceType = UIImagePickerControllerSourceType.Camera
        imagePickerController.cameraDevice = UIImagePickerControllerCameraDevice.Rear
        imagePickerController.editing = true
        imagePickerController.delegate = self
        imagePickerController.showsCameraControls = false

        var customCameraOverlayView = CustomCameraOverlayView()
        customCameraOverlayView.delegate = self
        imagePickerController.cameraOverlayView = customCameraOverlayView
        imagePickerController.cameraOverlayView!.frame = self.view.frame
        var screenBounds: CGSize = UIScreen.mainScreen().bounds.size
        var imageHeight = (screenBounds.width/3)*4
        var scale = screenBounds.height / imageHeight
        imagePickerController.cameraViewTransform = CGAffineTransformConcat(CGAffineTransformMakeScale(scale, scale), CGAffineTransformMakeTranslation(0, (screenBounds.height - imageHeight)/2))
        self.presentViewController(imagePickerController, animated: true, completion: nil)
    }

然后在CustomCameraOverlayView内部,我从IB中的“拍照”按钮到我的代码设置了一个动作。它会向代表发送一条消息来拍照:

@IBAction func takePicture(sender: UIButton) {
    delegate!.imagePickerController.takePicture()
}

几秒钟后调用委托方法。什么可能会减慢我的实施速度?

1 个答案:

答案 0 :(得分:3)

两者之间没有性能差异(至少不能用肉眼注意到)。它只是在复杂性和控制之间进行权衡。

AVFoundation很复杂,实施起来有点困难。但它带来了对每一位数据的巨大控制。对于涉及的任何类型的文件处理,AVFoundation是可行的方法。

另一方面,如果您只想执行原始任务(如录制和捕获图像),UIImagePickerController很容易实现和有用。

但是如果他们中的任何一个似乎响应缓慢,那很可能是因为你的实现。您需要发布代码来处理它。因此,性能不是两者之间选择的好标准。