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