2016-11-04 6 views
1

Я знаю, что вопрос такого типа уже задан, но я отлаживал его в деталях, и я пришел к этому выводу, что когда я отключил этот флагUIImagePickerController пользовательская кнопка FlashMode не работает на IOS 10 (быстро)

self.picker.showsCameraControls = false 

затем пользовательская кнопка вспышки не реагирует, но если я буду менять флаг

self.picker.showsCameraControls = true 

тогда моя кнопка пользовательских вспышек в ответе КИ, я проверить все делегат и флаги, но я не являюсь в состоянии указать ошибку, либо она находится в моем коде, либо она находится в версии IOS 10, если ее i n мой код, а затем показывая управление камерой, почему моя пользовательская кнопка вспышки изменяет состояние вспышки и работает нормально. вот мой код для лучшего понимания:

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() 
    } 
} 

Короче моя кнопка пользовательских flashmode не работает на cameraoverlayview. Если у вас нет решения этой проблемы, пожалуйста, предложите любой взлом. благодаря

ответ

3

Я решил свою проблему с неуклюжей хака,

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

Это достаточно быстро, чтобы не мешать пользователю показ и скрытие элементов управления. Он работал!

+0

Это работает !!! но почемуyyyyyyyyyyyyyyyy ?? – Zaraki

+0

Zaraki - это ошибка в версии iOS, я надеюсь, что они обязательно придумают это в следующих обновлениях, я тоже сообщил об этом в Apple, и я не понимаю, почему он не работает, но его взломать для запуска делегата. , – Steve