2016-11-04 2 views
1

Je sais qu'une question de ce type est déjà posée, mais je l'ai débogué dans le détail des bits, et je suis arrivé à ce point que lorsque j'ai éteint ce drapeauUIImagePickerController bouton FlashMode personnalisé ne fonctionne pas sur IOS 10 (swift)

self.picker.showsCameraControls = false 

puis sur le bouton flash personnalisé ne répond pas, mais si je vais changer le drapeau

self.picker.showsCameraControls = true 

alors mon bouton flash personnalisé répondant OK, je vérifier tous les délégués et les drapeaux, mais je ne suis pas capable de pointer le bug, soit il est dans mon code ou il est en version IOS 10, si son i n mon code puis sur montrant les commandes de la caméra pourquoi mon bouton flash personnalisé change l'état du flash et fonctionne bien. voici mon code pour une meilleure compréhension:

func configureImagePicker(){ 
     self.picker.delegate = self 
     self.picker.allowsEditing = false 
     if  UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) 
    { 
     self.picker.sourceType = UIImagePickerControllerSourceType.Camera 
     self.picker.mediaTypes = [kUTTypeImage as String] 
    } 
} 

    func showImagePicker(){ 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){ 

     self.picker.sourceType = UIImagePickerControllerSourceType.Camera 
     self.picker.showsCameraControls = false 
     self.picker.delegateController = self 
     self.picker.delegate = self 
     self.picker.mediaTypes = [kUTTypeImage as String] 
     self.picker.allowsEditing = false 


     if let cameraOverlay = self.picker.cameraOverlayView { 

      self.createCamerOverlay(cameraOverlay.frame) 
      self.picker.cameraOverlayView = self.overlayView 


      self.presentViewController(self.picker, animated: false, completion: { 
       dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(Double(0.5)*Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { 
        if self.picker.cameraDevice == UIImagePickerControllerCameraDevice.Rear && UIImagePickerController.isFlashAvailableForCameraDevice(UIImagePickerControllerCameraDevice.Rear) 
        { 
         if Float.init(UIDevice.currentDevice().systemVersion) < 11.0 
         { 
          switch(Global.shared.currenFlashOption) 
          { 
           case .FlashOff: 
            self.picker.cameraFlashMode = .Off 
            let flashImage = UIImage(named: "btn-flash-off") 
            self.flashButton.setImage(flashImage, forState: UIControlState.Normal) 
            self.flashButton.setImage(flashImage, forState: UIControlState.Highlighted) 
           case .FlashAuto: 
            self.picker.cameraFlashMode = .Auto 
            let flashImage = UIImage(named: "btn-flash") 
            self.flashButton.setImage(flashImage, forState: UIControlState.Normal) 
            self.flashButton.setImage(flashImage, forState: UIControlState.Highlighted) 
           case .FlashOn: 
            self.picker.cameraFlashMode = .On 
            let flashImage = UIImage(named: "btn-flash-on") 
            self.flashButton.setImage(flashImage, forState: UIControlState.Normal) 
            self.flashButton.setImage(flashImage, forState: UIControlState.Highlighted) 
          } 
         } 
         else 
         { 
          self.picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On 

         } 
        } 
       }); 
      }); 

     } else { 
      print("Camera overlay frame not found. So did not present the controller.") 
     } 
    } 
    else{ 
     let alert = UIAlertView(title: "Error", message: "Camera Not Available", delegate: nil, cancelButtonTitle: "Cancel") 
     alert.show() 
    } 
} 

En bref mon bouton flashmode personnalisé ne fonctionne pas sur cameraoverlayview. S'il n'y a pas de solution à ce problème, veuillez suggérer un hack. grâce

Répondre

3

J'ai résolu mon problème avec un hack maladroit,

self.picker.showsCameraControls = true 
self.picker.cameraFlashMode = .On 
self.picker.showsCameraControls = false 

Il est assez rapide pour ne pas perturber l'utilisateur avec la projection et les contrôles qui se cachent. Ça a marché!

+0

Ca marche !!! mais pourquoiyyyyyyyyyy? – Zaraki

+0

Zaraki c'est une faille dans la version iOS, j'espère qu'ils vont certainement le comprendre dans les prochaines mises à jour je l'ai signalé à Apple aussi, et je ne comprends pas pourquoi il ne fonctionne pas mais c'est un hack pour déclencher le délégué .. . – Steve