React Native Vision Camera在iPhone12上超广角摄像头无法正常工作
解决React Native Vision Camera在iPhone12上无法切换超广角的问题
问题原因
你的iPhone12后置是双摄组合设备(isMultiCam: true),超广角和广角镜头集成在同一个CaptureDevice里,而非独立设备。直接通过useCameraDevices("ultra-wide-angle-camera")获取的仍然是这个组合设备,默认会以广角(1x)模式启动,所以即使拉满最小变焦也无法触发超广角。
从你提供的相机数据可以明确对应关系:
neutralZoom: 2→ 对应原生相机的1x(广角)变焦minZoom: 1→ 对应原生相机的0.5x(超广角)变焦
解决方案
不需要单独指定设备类型,直接获取后置组合设备,通过设置zoom参数切换到超广角:
初始化切换到超广角的代码示例
import { useCameraDevices } from 'react-native-vision-camera'; import { Camera, StyleSheet } from 'react-native'; // 获取所有后置设备(自动识别双摄组合) const devices = useCameraDevices(); const device = devices.back; return ( device != null && ( <Camera style={StyleSheet.absoluteFill} device={device} isActive={true} enableZoomGesture={true} initialZoom={1} // 设置为device.minZoom的值,对应0.5x超广角 /> ) );
动态切换变焦的扩展示例
如果需要手动切换超广角/广角,可以通过useRef控制Camera实例:
import { useRef } from 'react'; import { useCameraDevices } from 'react-native-vision-camera'; import { Camera, StyleSheet, Button, View } from 'react-native'; const devices = useCameraDevices(); const device = devices.back; const cameraRef = useRef<Camera>(null); // 切换到超广角 const switchToUltraWide = () => { if (cameraRef.current != null && device != null) { cameraRef.current.setZoom(device.minZoom); } }; // 切换回广角 const switchToWide = () => { if (cameraRef.current != null && device != null) { cameraRef.current.setZoom(device.neutralZoom); } }; return ( device != null && ( <View style={StyleSheet.absoluteFill}> <Camera ref={cameraRef} style={StyleSheet.absoluteFill} device={device} isActive={true} enableZoomGesture={true} /> <View style={{ position: 'bottom', padding: 20, flexDirection: 'row', gap: 10 }}> <Button title="0.5x 超广角" onPress={switchToUltraWide} /> <Button title="1x 广角" onPress={switchToWide} /> </View> </View> ) );
关键逻辑说明
- 当
zoom设为device.minZoom时,自动切换到超广角镜头(0.5x) - 当
zoom设为device.neutralZoom时,切换回广角镜头(1x) zoom > device.neutralZoom时,启用数码变焦放大
内容的提问来源于stack exchange,提问作者1110
相关产品推荐
相关产品推荐

