You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:15:13