2016-01-15 37 views
0

我正在使用MapView的應用程序,我有一個顯示在MapView頂部的自定義按鈕。當用戶點擊該按鈕時,我想啓動相機,然後用戶拍照並選擇「使用照片」。除了下一部分,我已經完成了所有這些工作。一旦用戶選擇「使用照片」,我想要捕獲的圖像被傳遞給另一個功能。然後視圖被釋放,並返回到地圖..我想這可以完成使用完成處理程序?但我不太清楚這是否是最好的方法,如果是這樣,如何將UIImage類型的圖像傳遞給要處理的函數。誰能幫忙?UIImagePickerController didFinishPickingImage完成後調用自定義函數

我有一些像現在以下幾點:

@IBAction func mapButton(sender: AnyObject) { 
    let image = UIImagePickerController() 
    //image.delegate = self 
    image.sourceType = UIImagePickerControllerSourceType.Camera 
    image.allowsEditing = false 
    self.presentViewController(image, animated: true, completion: nil) 
} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 
    self.dismissViewControllerAnimated(true, completion: customFunction(image)) 
} 

func customFunction(image: UIImage) { 
    print("Do Something with Image") 
} 
+0

爲什麼設置代表被評論?取消註釋'image.delegate = self' – Ponf

+0

我忘了在我的ViewController定義中包含UINavigationControllerDelegate,所以它給了我一個錯誤。我修復了它,並利用了@rmaddy下面所說的一點點來修復它。 – TX1121

回答

4

設置取消註釋行//image.delegate = self(爲清晰起見,圖像拾取代表你可能要重命名的選擇器imagePicker或imagePickerController講清楚,這是一個選擇器,而不是拾取的圖像)。

而且didFinishPickingImage已被棄用所以這將是更好地使用didFinishPickingMediaWithInfo

若要調用完成處理程序的功能:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {   
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage{ 
      dismissViewControllerAnimated(true, completion: { self.customFunction(pickedImage)}) 
     }else{ 
      dismissViewControllerAnimated(true, completion: nil) 
     } 
    } 

或者你可以直接調用該函數,並將其解聘選擇器:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {   
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage{ 
      customFunction(pickedImage) 
    } 
    dismissViewControllerAnimated(true, completion: nil) 

}  
0

委託中返回的圖像可以先保存在引用中。然後關閉視圖控制器,然後調用您的自定義方法。這將確保在解除視圖控制器之前保存圖像參考。

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 
    let selectedImage=image; 
    self.dismissViewControllerAnimated(true, completion: nil) 
    customFunction(image); 
}