KMM跨平台相机功能实现:iOS端图片保存与结果回传至共享代码问题求助
KMM跨平台相机功能实现:iOS端图片保存与结果回传至共享代码问题求助
我现在正在开发一个Kotlin Multiplatform Mobile(KMM)应用,想要实现一套统一的相机功能,让用户能在Android和iOS上拍照并保存到设备文件系统里。Android端的实现已经顺利完成了,但iOS这边找合适的方案、落地的时候遇到了不少麻烦。
iOS端我打算用UIImagePickerController来捕获照片,之后把拍到的图片存到文件系统里。我的核心目标是把这个功能无缝集成到共享的KMM代码里,保证两端的复用性和一致性。
我试着在iosMain里写了个CameraManager类,用了UIImagePickerController,但现在卡在了怎么正确保存捕获到的图片,还有怎么把结果回传给共享代码上。
我的CameraManager大致是这样的:
actual class CameraManager : NSObject(), UIImagePickerControllerDelegate, UINavigationControllerDelegate { private var onImagePicked: ((String?) -> Unit)? = null fun launchCamera(onImagePicked: ((String?) -> Unit)?, viewController: UIViewController) { this.onImagePicked = onImagePicked val imagePicker = UIImagePickerController() imagePicker.sourceType = UIImagePickerControllerSourceType.Camera imagePicker.delegate = this viewController.presentViewController(imagePicker, animated = true, completion = null) } override fun imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: Map<NSObject, *>) { picker.dismissViewControllerAnimated(true, null) val image = info[UIImagePickerControllerOriginalImage] as? UIImage handleImagePickerResult(image) } override fun imagePickerControllerDidCancel(picker: UIImagePickerController) { picker.dismissViewControllerAnimated(true, null) onImagePicked?.invoke(null) } private fun handleImagePickerResult(image: UIImage?) { image ?: run { onImagePicked?.invoke(null) return } // 这里就是我卡壳的地方:不知道怎么把UIImage保存到文件系统,拿到路径后回传给共享代码 } }
我现在的主要困惑点有这些:
- 怎么把
UIImage正确保存到iOS的文件系统中,获取到能被共享代码直接使用的本地文件路径? - 怎么在
UIImagePickerController的回调里,把保存后的文件路径正确传递给共享代码里的回调函数? - 有没有符合KMM最佳实践的方式,让iOS端的相机逻辑和共享层的交互更顺畅?
希望有大佬能给我指个方向,或者提供一些可行的代码示例,谢谢!
备注:内容来源于stack exchange,提问作者Fourty-Three
相关产品推荐
相关产品推荐

