目前我在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()
}
几秒钟后调用委托方法。什么可能会减慢我的实施速度?
答案 0 :(得分:3)
两者之间没有性能差异(至少不能用肉眼注意到)。它只是在复杂性和控制之间进行权衡。
AVFoundation
很复杂,实施起来有点困难。但它带来了对每一位数据的巨大控制。对于涉及的任何类型的文件处理,AVFoundation
是可行的方法。
另一方面,如果您只想执行原始任务(如录制和捕获图像),UIImagePickerController
很容易实现和有用。
但是如果他们中的任何一个似乎响应缓慢,那很可能是因为你的实现。您需要发布代码来处理它。因此,性能不是两者之间选择的好标准。