基于屏幕的缩放元素的偏移量计算问题

时间:2019-06-26 14:41:04

标签: javascript react-native react-native-ios image-zoom react-animated

我正在尝试根据PanResponder给我的pageX和pageY坐标来计算放大图像的坐标。我以为我只需要将X和Y的偏移量加到返回给我的坐标上,但我似乎误判了将要发生的情况。

reference drawing of what I'm trying to do

无论缩放比例如何,设备屏幕的坐标似乎都与缩放元素上的相同位置相关。因此,如果我在设备屏幕的左上角放置一些内容,它将转到放大的元素上的该位置。

我通过使用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()和计算出的坐标将图像放置在正确的起始位置,以便它们能够之后将其拖动。

当前计算使放置的所有内容在触摸事件的右下方。我不确定我的逻辑或计算在哪里出错。我希望有人可能对我的计算或思维过程错在哪里有所了解。

1 个答案:

答案 0 :(得分:0)

好的,所以我的逻辑是同时正确和错误的。问题是当它们放大XY值时保持不变,因此我正在查看视口中的“较少”像素,这意味着我必须将原始事件的XY坐标除以缩放比例,然后添加偏移量才能获得正确的x和y值。