11import React , { useState } from "react" ;
22import { SafeAreaView , View , Text , Alert } from "react-native" ;
3+ import _ from "lodash" ;
34import GestureDetector , {
45 GesturePath ,
56 Cursor ,
67 GestureRecorder ,
78} from "react-native-gesture-detector" ;
89
910const CreateGestureScreen = ( ) => {
10- const [ tmpOffset , setTmpOffset ] = useState ( null ) ;
11+ const [ recorderOffset , setRecorderOffset ] = useState ( null ) ;
12+ const [ detectorOffset , setDetectorOffset ] = useState ( null ) ;
1113 const [ finishedGesture , setFinishedGesture ] = useState ( [ ] ) ;
1214
1315 return (
1416 < SafeAreaView style = { { flex : 1 } } >
15- < GestureRecorder onPanRelease = { gesture => setFinishedGesture ( gesture ) } >
17+ < GestureRecorder
18+ onPanRelease = { gesture => {
19+ setFinishedGesture ( gesture ) ;
20+ setDetectorOffset ( recorderOffset ) ;
21+ } }
22+ >
1623 { ( { gesture, offset } ) => {
17- if ( tmpOffset !== offset && offset !== null ) {
18- setTmpOffset ( offset ) ;
24+ if ( ! _ . isEqual ( offset , recorderOffset ) && offset !== null ) {
25+ setRecorderOffset ( offset ) ;
1926 }
2027
2128 return (
@@ -31,14 +38,14 @@ const CreateGestureScreen = () => {
3138 < View style = { { position : "relative" , width : "100%" , height : "100%" } } >
3239 < GesturePath
3340 path = { gesture . map ( coordinate => {
34- if ( ! tmpOffset ) {
35- return coordinate ;
41+ if ( recorderOffset ) {
42+ return {
43+ x : coordinate . x + recorderOffset . x ,
44+ y : coordinate . y + recorderOffset . y ,
45+ } ;
3646 }
3747
38- return {
39- x : coordinate . x + tmpOffset . x ,
40- y : coordinate . y + tmpOffset . y ,
41- } ;
48+ return coordinate ;
4249 } ) }
4350 color = "green"
4451 slopRadius = { 30 }
@@ -67,14 +74,14 @@ const CreateGestureScreen = () => {
6774 < View style = { { position : "relative" , width : "100%" , height : "100%" } } >
6875 < GesturePath
6976 path = { finishedGesture . map ( coordinate => {
70- if ( ! tmpOffset ) {
71- return coordinate ;
77+ if ( detectorOffset ) {
78+ return {
79+ x : coordinate . x + detectorOffset . x ,
80+ y : coordinate . y + detectorOffset . y ,
81+ } ;
7282 }
7383
74- return {
75- x : coordinate . x + tmpOffset . x ,
76- y : coordinate . y + tmpOffset . y ,
77- } ;
84+ return coordinate ;
7885 } ) }
7986 color = "green"
8087 slopRadius = { 30 }
0 commit comments