From 04747c016c935262d447f91b57dc49778d912b37 Mon Sep 17 00:00:00 2001 From: Ragnar Rebase Date: Tue, 26 Mar 2024 21:14:17 +0200 Subject: [PATCH 1/2] Use `locationOfTouch:inView` over `locationInView` for focal (#2833) Replace `locationInView` with `locationOfTouch:inView:` in Pinch handler to fix truncated focalX and focalY in gesture handler context. Tested on repro example in (#2833). --- apple/Handlers/RNPinchHandler.m | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apple/Handlers/RNPinchHandler.m b/apple/Handlers/RNPinchHandler.m index d4351bea08..c0adeae61a 100644 --- a/apple/Handlers/RNPinchHandler.m +++ b/apple/Handlers/RNPinchHandler.m @@ -163,8 +163,15 @@ - (RNGestureHandlerEventExtraData *)eventExtraData:(NSMagnificationGestureRecogn #else - (RNGestureHandlerEventExtraData *)eventExtraData:(UIPinchGestureRecognizer *)recognizer { + CGPoint accumulatedPoint = CGPointZero; + for (int i = 0; i < recognizer.numberOfTouches; i++) { + CGPoint location = [recognizer locationOfTouch:i inView:recognizer.view]; + accumulatedPoint.x += location.x; + accumulatedPoint.y += location.y; + } + CGPoint focalPoint = CGPointMake(accumulatedPoint.x / recognizer.numberOfTouches, accumulatedPoint.y / recognizer.numberOfTouches); return [RNGestureHandlerEventExtraData forPinch:recognizer.scale - withFocalPoint:[recognizer locationInView:recognizer.view] + withFocalPoint:focalPoint withVelocity:recognizer.velocity withNumberOfTouches:recognizer.numberOfTouches withPointerType:_pointerType]; From ac790946bb2b69759cae5499e1fc9243bf6a7263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Bert?= <63123542+m-bert@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:47:46 +0100 Subject: [PATCH 2/2] Fix formatting --- apple/Handlers/RNPinchHandler.m | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apple/Handlers/RNPinchHandler.m b/apple/Handlers/RNPinchHandler.m index c0adeae61a..dd61b991d1 100644 --- a/apple/Handlers/RNPinchHandler.m +++ b/apple/Handlers/RNPinchHandler.m @@ -164,12 +164,16 @@ - (RNGestureHandlerEventExtraData *)eventExtraData:(NSMagnificationGestureRecogn - (RNGestureHandlerEventExtraData *)eventExtraData:(UIPinchGestureRecognizer *)recognizer { CGPoint accumulatedPoint = CGPointZero; + for (int i = 0; i < recognizer.numberOfTouches; i++) { CGPoint location = [recognizer locationOfTouch:i inView:recognizer.view]; accumulatedPoint.x += location.x; accumulatedPoint.y += location.y; } - CGPoint focalPoint = CGPointMake(accumulatedPoint.x / recognizer.numberOfTouches, accumulatedPoint.y / recognizer.numberOfTouches); + + CGPoint focalPoint = + CGPointMake(accumulatedPoint.x / recognizer.numberOfTouches, accumulatedPoint.y / recognizer.numberOfTouches); + return [RNGestureHandlerEventExtraData forPinch:recognizer.scale withFocalPoint:focalPoint withVelocity:recognizer.velocity