这是我的班级指南针:
class Compass extends Component {
constructor(props) {
super(props);
}
componentWillMount(){
this._animeRotation = new Animated.Value(0);
}
componentDidMount() {
this.startAnimation();
}
startAnimation() {
Animated.timing(this._animeRotation, {
toValue: this.props.magn, //<-- What put here?
duration: 1000,
}).start(() => {
this.startAnimation();
});
}
render() {
var interpolatedRotateAnimation = this._animeRotation.interpolate({
inputRange: [0, 100],
outputRange: ['0deg', '360deg']
});
return (
<View>
<Animated.View style={[styles.box, {transform: [{rotate: interpolatedRotateAnimation}]}]}>
<Image style={styles.box} source={require('./arrow.png')}></Image>
</Animated.View>
</View>
);
}
}
这是App类:
class App extends Component {
constructor(props) {
super(props);
this.state = {
magn: {
x: 0,
y: 0,
z: 0
}
};
}
componentDidMount() {
//I can get the gyroscope if is necessary
SensorManager.startMagnetometer(500);
// magn is a object with axis z,y and x
DeviceEventEmitter.addListener('Magnetometer', (magn) => this.setState({magn}));
}
render() {
return (
<View>
<Compass magn={this.state.magn.x}></Compass>
</View>
);
}
}
使用此代码,箭头会旋转但不应该旋转。我必须做什么?
答案 0 :(得分:2)
数字仅与当前检测到的“磁性北极”有关,该磁场受建筑物中任何铁(例如钢)材料的影响。因此,您首先必须确定什么是真正的北方。
此外,您还需要使用X,Y和Z并获取相对于手机的方向(如果手机是水平或垂直放置,并且是纵向还是横向)。该算法根本不简单。
由于这个原因,我建议您使用现有的包而不是Sensor数据包来获取方向。他们进行计算,并给您一个标题,就像您在动画代码中所期望的那样。另一种可能性是查看这些软件包的开源代码并复制计算结果。
如果您的React Native应用与Expo一起使用,例如它是使用<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.js"></script>
<svg id="segmentsGraph"></svg>
命令(CRNA)制作的,则可以使用Create React Native App
。这是[示例](Github上的https://github.com/martincarrera/expo-location-example)和here are the docs(查找“标题”部分)。
否则,您可以使用React Native simple compass
答案 1 :(得分:1)
我最终制作了自己的包裹。检查一下: