0

目前我在UIImagePickerController上使用自定义覆盖图,调用takePicture()来捕获图像。但是,调用代理方法didFinishPickingMediaWithInfo需要几秒钟的时间。我听说过使用AVCaptureSession来控制相机。这会让我获得更快的拍摄速度(类似于Snapchat)吗?还是有,我可以AVCaptureSession vs UIImagePickerController速度

感谢

编辑

我执行我的图像采集如下任何其他方式。

首先我初始化一个UIImagePickerController,使用称为CustomCameraOverlayView的UIView子类作为叠加视图,并将其呈现在模态视图中。 CustomCameraOverlayView的代表设置为UIImagePickerControllerDelegate(个人),因此我可以拨打CustomCameraOverlayView中的takePicture

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() 
} 

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

回答

3

两者之间没有性能差异(至少不是肉眼可以注意到的)。它只是复杂性和控制之间的折衷。

AVFoundation是复杂的,有点难以实现。但它具有对每一位数据的大量控制。对于涉及的任何类型的文件处理,AVFoundation是要走的路。

另一方面,UIImagePickerController很容易实现和有用,如果你只想做原始任务,如记录和捕获图像。

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

+0

嗯有趣,我已经更新了我的答案,包括编码。 – Tometoyou