在拍摄照片的准确时刻捕获陀螺仪数据

时间:2017-03-17 21:32:33

标签: ios swift swift3

我正在创建一个应用程序,该应用程序将捕获照片并根据照片捕获时的陀螺仪数据重新定向照片。

我已经创建了从手机中捕获陀螺仪数据的功能:

startUpdates()

并停止捕获数据:

stopUpdates()

我尝试将其添加到UIImagePickerController中:

   if UIImagePickerController.isSourceTypeAvailable(.camera) {
        guard ptInitials.text != "" else {
            missingIdentifier(text: "Please add an identifier prior to taking a photo")
            return}
        startUpdates()  
        imagePicker =  UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.allowsEditing = false
        imagePicker.sourceType = UIImagePickerControllerSourceType.camera
        imagePicker.cameraCaptureMode = .photo
        imagePicker.modalPresentationStyle = .fullScreen
        present(imagePicker,
                animated: true,
            completion: nil)

    }

当图像捕获过程开始时,这开始陀螺仪捕获。

我将陀螺仪数据传递给可选的double,livePhotoAxis:Double ?,而它正在" startUpdates()"功能。

我试图把它带到"停止"拍摄照片后捕获数据,以便将最后已知的陀螺仪数据保存在我的变量中,并能够传递到其他函数中;

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    stopUpdates()
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    saveImageToDocuments(image: chosenImage, fileNameWithExtension: "image.jpg")
    dismiss(animated: true, completion: nil

    )

}

然而,问题是在用户"确认"之后才调用stopUpdates()方法。他们喜欢他们拍下的照片(重拍它)。

根据我的阅读,有一个带有uiImagePickerControllerUserDidCaptureItem的私有API,可捕获拍摄照片的确切时刻。我可以使用NSNotification尝试找到这个,并在实际拍摄照片后调用StopUpdates()。

这是私有API吗?我可以使用它来捕获这一时刻或我的应用程序会被拒绝吗?

同样,有没有更好的方法在照片捕捉的确切时刻关闭我的陀螺仪更新?

谢谢!

1 个答案:

答案 0 :(得分:0)

我添加了此代码并修复了问题,但我仍然不知道这是否是私有API,是否会被允许进入应用商店?或者,如果有更好的方法来实现这一目标?

        NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "_UIImagePickerControllerUserDidCaptureItem"), object:nil, queue:nil, using: { note in
            self.stopUpdates()
        })

更新:这并没有触发拍摄照片的确切时刻。当照片被锁定在"时它会闪光。按下拍照按钮和照片锁定到位之间有几秒钟(2英寸)。因此,如果您在此期间移动手机,陀螺仪数据将不准确。

关于如何改进的任何想法?