2017-01-19 4 views
1

사용자가 사진을 찍고 사진 사용 버튼을 클릭 할 때 두 번째 기능이 호출되지 않는 이유는 무엇입니까? 뷰가 닫히지 만 print 문이 작동하지 않고 함수가 호출되지 않습니다.카메라 사진 선택이 Swift에서 작동하지 않습니다.

@IBAction func openCamera(_ sender: UIBarButtonItem) 
    { 
     if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { 
      let imagePicker = UIImagePickerController() 
      imagePicker.delegate = self 
      imagePicker.sourceType = UIImagePickerControllerSourceType.camera; 
      imagePicker.allowsEditing = false 
      self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
     print("made it") 
     createImage(image: image) 
     self.dismiss(animated: true, completion: nil); 
    } 
+0

보기를 위임자로 설정 했습니까? ** imagePicker.delegate = self ** someplace (아마 viewDidLoad)가 있습니까? – dfd

+0

첫 번째 방법 @dfd – Steve

+0

죄송합니다. 내가 볼 수있는 유일한 것은이 두 번째 오버라이드뿐입니다. 스위프트 3을 사용하고 있습니까? 그렇다면 ** func imagePickerController (_ picker : UIImagePickerController, didFinishPickingMediaWithInfo 정보 : [String : Any]) {** – dfd

답변

1

스위프트 3을 사용하면 다음과 같습니다. 내 코드는 (1) UIImagePickerController를 사용하여 카메라를 사용하거나 카메라 롤에서 선택한 다음 (2) 버튼의 코드를 제거한 편집보기 컨트롤러로 속행하는 선택보기 컨트롤러가 있어야합니다. 나는 IB를 사용하지 않고있다. 표기 : 다른 VC에 segueing하지 않는 경우

class SelectViewController: UIViewController { 

    // selection and pass to editor 

    let picker = ImagePickerController() 
    var image = UIImage() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     picker.delegate = self 
    } 

extension SelectViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    // MARK: Camera App 

    func openCameraApp() { 
     if UIImagePickerController.availableCaptureModes(for: .rear) != nil { 
      picker.allowsEditing = false 
      picker.sourceType = UIImagePickerControllerSourceType.camera 
      picker.cameraCaptureMode = .photo 
      picker.modalPresentationStyle = .fullScreen 
      present(picker, 
        animated: true, 
        completion: nil) 
     } else { 
      noCamera() 
     } 
    } 
    func noCamera(){ 
     let alertVC = UIAlertController(
      title: "No Camera", 
      message: "Sorry, this device has no camera", 
      preferredStyle: .alert) 
     let okAction = UIAlertAction(
      title: "OK", 
      style:.default, 
      handler: nil) 
     alertVC.addAction(okAction) 
     present(
      alertVC, 
      animated: true, 
      completion: nil) 
    } 

    // MARK: Photos Albums 

    func showImagePicker() { 
     picker.allowsEditing = false 
     picker.sourceType = .photoLibrary 
     present(picker, 
       animated: true, 
       completion: nil) 
     picker.popoverPresentationController?.sourceView = self.view 
    } 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
     image = chosenImage 
     self.performSegue(withIdentifier: "ShowEditView", sender: self) 
     dismiss(animated: true, completion: nil) 
    } 
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     dismiss(animated: false, completion: nil) 
    } 

    // MARK: Seque to EditViewController 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ShowEditView" { 
      if let vc = segue.destination as? EditViewController { 
       vc.image = image 
      } 
     } 
    } 

} 

.performSegue 전화와 최종 MARK 아래 코드를 제거합니다. (카메라/선택한 이미지의 크기는 입니다. var.)