【问题标题】:UIImagePickerController custom FlashMode button is not working on IOS 10 (swift)UIImagePickerController 自定义 FlashMode 按钮在 IOS 10 (swift) 上不起作用
【发布时间】:2017-03-17 22:29:27
【问题描述】:

我知道已经问过这种类型的问题,但我对其进行了详细的调试,当我关闭此标志时,我得出了这一点

   self.picker.showsCameraControls = false

然后自定义闪光灯按钮没有响应,但如果我将标志更改为

   self.picker.showsCameraControls = true

然后我的自定义 flash 按钮响应 OK,我检查了所有的代表和标志,但我无法确定错误,无论是在我的代码中还是在 IOS 10 版本中,如果它在我的代码中关于显示相机控制为什么我的自定义闪光灯按钮会改变闪光灯状态并正常工作。 这是我的代码以便更好地理解:

   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 上不起作用。 如果这个问题没有解决方案,那么请提出任何黑客建议。 谢谢

【问题讨论】:

    标签: ios swift camera-overlay camera-flash cameraoverlayview


    【解决方案1】:

    我用一个笨拙的 hack 解决了我的问题,

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

    显示和隐藏控件的速度足够快,不会打扰用户。 成功了!

    【讨论】:

    • Zaraki 这是 iOS 版本中的一个缺陷,我希望他们一定会在即将到来的更新中解决这个问题,我也向苹果报告了它,我不明白为什么它不起作用,但它破解来触发委托...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2016-04-30
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多