我正在尝试根据PanResponder给我的pageX和pageY坐标来计算放大图像的坐标。我以为我只需要将X和Y的偏移量加到返回给我的坐标上,但我似乎误判了将要发生的情况。
无论缩放比例如何,设备屏幕的坐标似乎都与缩放元素上的相同位置相关。因此,如果我在设备屏幕的左上角放置一些内容,它将转到放大的元素上的该位置。
我通过使用RCTUIManager测量缩放后的元素来获得偏移量,并且它似乎根据我测试过的其他计算为X和Y偏移量返回了正确的值。
这是我尝试使用的代码的最新迭代:
let {measureData} = this.state;
let offsetX = measureData.x;
let offsetY = measureData.y
let x = (e.nativeEvent.pageX) - offsetX;
let y = (e.nativeEvent.pageY) - offsetY;
我之所以要减去,是因为我收到的值是负数,我也将允许他们稍后平移它,因此我希望如果他们将其移动,因此该值是正数即可减去它。
measureData
包含来自RCTUIManager的值,该值在每次发生缩放事件时都会更新。
我如何更新measureData
setMeasureData = () => {
RCTUIManager.measure(ReactNative.findNodeHandle(this.refs['wrap']), (x, y, width, height, pageX, pageY) => {
this.setState({
measureData: {x, y, width, height, pageX, pageY}
})
});
}
更改缩放后在回调函数中调用。
我尝试添加的元素是使用另一个我将XY值输入其中的组件添加的,该组件使用Animated.ValueXY()
和计算出的坐标将图像放置在正确的起始位置,以便它们能够之后将其拖动。
当前计算使放置的所有内容在触摸事件的右下方。我不确定我的逻辑或计算在哪里出错。我希望有人可能对我的计算或思维过程错在哪里有所了解。
答案 0 :(得分:0)
好的,所以我的逻辑是同时正确和错误的。问题是当它们放大XY值时保持不变,因此我正在查看视口中的“较少”像素,这意味着我必须将原始事件的XY坐标除以缩放比例,然后添加偏移量才能获得正确的x和y值。