проблема с вычислением смещения увеличенного элемента на основе экрана - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь вычислить координаты увеличенного изображения на основе координат pageX и pageY, предоставленных мне PanResponder.Я подумал, что мне просто нужно добавить смещение 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 голосов
/ 27 июня 2019

Хорошо, поэтому моя логика была правильной и неправильной одновременно.Проблема заключалась в том, что когда они увеличивают значения XY, остаются неизменными, поэтому я смотрю на «меньше» пикселей в области просмотра, означая, что мне нужно было разделить координаты XY от исходного события по шкале, а затем добавить смещение, чтобы я мог получитьправильные значения x и y.

...