@@ -14,7 +14,7 @@ let TAG = 0;
1414export class GesturesObserver {
1515 private _callback : ( args : GestureEventData ) => void ;
1616 private _target : View & {
17- _gestureObservers ?: any ;
17+ _gestureHandlers ?: any ;
1818 } ;
1919 private _context : any ;
2020
@@ -72,9 +72,9 @@ export class GesturesObserver {
7272 }
7373 }
7474 list . length = 0 ;
75- if ( this . target . _gestureObservers [ this . type ] ) {
76- this . target . _gestureObservers [ this . type ] . detachFromView ( ) ;
77- delete this . target . _gestureObservers [ this . type ] ;
75+ if ( this . target . _gestureHandlers && this . target . _gestureHandlers [ this . type ] ) {
76+ this . target . _gestureHandlers [ this . type ] . detachFromView ( ) ;
77+ delete this . target . _gestureHandlers [ this . type ] ;
7878 }
7979 }
8080 }
@@ -145,63 +145,88 @@ export class GesturesObserver {
145145 }
146146 } ;
147147 }
148- private _attach ( target : View , type : GestureTypes ) {
148+ private _attach (
149+ target : View & {
150+ _gestureHandlers ?: any ;
151+ } ,
152+ type : GestureTypes
153+ ) {
149154 if ( type & GestureTypes . touch ) {
150155 this . _notifyTouch = true ;
151156 }
152157 const manager = Manager . getInstance ( ) ;
158+ if ( ! target . _gestureHandlers ) {
159+ target . _gestureHandlers = { } ;
160+ }
161+ let gestureHandler = target . _gestureHandlers [ type ] ;
162+
153163 if ( type & GestureTypes . tap ) {
154- const gestureHandler = manager . createGestureHandler ( HandlerType . TAP , target [ 'TAP_HANDLER_TAG' ] , {
155- waitFor : [ target [ 'LONGPRESS_HANDLER_TAG' ] , target [ 'DOUBLE_TAP_HANDLER_TAG' ] ] ,
156- } ) ;
164+ if ( ! gestureHandler ) {
165+ gestureHandler = manager . createGestureHandler ( HandlerType . TAP , target [ 'TAP_HANDLER_TAG' ] , {
166+ waitFor : [ target [ 'LONGPRESS_HANDLER_TAG' ] , target [ 'DOUBLE_TAP_HANDLER_TAG' ] ] ,
167+ } ) ;
168+ gestureHandler . attachToView ( target ) ;
169+ console . log ( '_attach' , target , type ) ;
170+ target . _gestureHandlers [ type ] = gestureHandler ;
171+ }
157172 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . tap , GestureState . ACTIVE ) , this ) ;
158- gestureHandler . attachToView ( target ) ;
159- target . _gestureObservers [ type ] = gestureHandler ;
160173 }
161174 if ( type & GestureTypes . longPress ) {
162- const gestureHandler = manager . createGestureHandler ( HandlerType . LONG_PRESS , target [ 'LONGPRESS_HANDLER_TAG' ] ) ;
175+ if ( ! gestureHandler ) {
176+ gestureHandler = manager . createGestureHandler ( HandlerType . LONG_PRESS , target [ 'LONGPRESS_HANDLER_TAG' ] ) ;
177+ gestureHandler . attachToView ( target ) ;
178+ target . _gestureHandlers [ type ] = gestureHandler ;
179+ }
163180 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . longPress , GestureState . ACTIVE ) , this ) ;
164- gestureHandler . attachToView ( target ) ;
165- target . _gestureObservers [ type ] = gestureHandler ;
166181 }
167182 if ( type & GestureTypes . doubleTap ) {
168- const gestureHandler = manager . createGestureHandler ( HandlerType . TAP , target [ 'DOUBLE_TAP_HANDLER_TAG' ] , {
169- numberOfTaps : 2 ,
170- } ) ;
183+ if ( ! gestureHandler ) {
184+ gestureHandler = manager . createGestureHandler ( HandlerType . TAP , target [ 'DOUBLE_TAP_HANDLER_TAG' ] , {
185+ numberOfTaps : 2 ,
186+ } ) ;
187+ gestureHandler . attachToView ( target ) ;
188+ target . _gestureHandlers [ type ] = gestureHandler ;
189+ }
171190 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . doubleTap ) , this ) ;
172- gestureHandler . attachToView ( target ) ;
173- target . _gestureObservers [ type ] = gestureHandler ;
174191 }
175192
176193 if ( type & GestureTypes . pinch ) {
177- const gestureHandler = manager . createGestureHandler ( HandlerType . PINCH , TAG ++ ) ;
194+ if ( ! gestureHandler ) {
195+ gestureHandler = manager . createGestureHandler ( HandlerType . PINCH , TAG ++ ) ;
196+ gestureHandler . attachToView ( target ) ;
197+ target . _gestureHandlers [ type ] = gestureHandler ;
198+ }
178199 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . pinch ) , this ) ;
179200 gestureHandler . on ( GestureHandlerTouchEvent , this . onGestureTouchChange ( GestureTypes . pinch ) , this ) ;
180- gestureHandler . attachToView ( target ) ;
181- target . _gestureObservers [ type ] = gestureHandler ;
182201 }
183202
184203 if ( type & GestureTypes . swipe ) {
185- const gestureHandler = manager . createGestureHandler ( HandlerType . FLING , TAG ++ ) ;
204+ if ( ! gestureHandler ) {
205+ gestureHandler = manager . createGestureHandler ( HandlerType . FLING , TAG ++ ) ;
206+ gestureHandler . attachToView ( target ) ;
207+ target . _gestureHandlers [ type ] = gestureHandler ;
208+ }
186209 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . swipe ) , this ) ;
187- gestureHandler . attachToView ( target ) ;
188- target . _gestureObservers [ type ] = gestureHandler ;
189210 }
190211
191212 if ( type & GestureTypes . pan ) {
192- const gestureHandler = manager . createGestureHandler ( HandlerType . PAN , TAG ++ , { } ) ;
213+ if ( ! gestureHandler ) {
214+ gestureHandler = manager . createGestureHandler ( HandlerType . PAN , TAG ++ , { } ) ;
215+ gestureHandler . attachToView ( target ) ;
216+ target . _gestureHandlers [ type ] = gestureHandler ;
217+ }
193218 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . pan ) , this ) ;
194219 gestureHandler . on ( GestureHandlerTouchEvent , this . onGestureTouchChange ( GestureTypes . pan ) , this ) ;
195- gestureHandler . attachToView ( target ) ;
196- target . _gestureObservers [ type ] = gestureHandler ;
197220 }
198221
199222 if ( type & GestureTypes . rotation ) {
200- const gestureHandler = manager . createGestureHandler ( HandlerType . ROTATION , TAG ++ , { } ) ;
223+ if ( ! gestureHandler ) {
224+ gestureHandler = manager . createGestureHandler ( HandlerType . ROTATION , TAG ++ , { } ) ;
225+ gestureHandler . attachToView ( target ) ;
226+ target . _gestureHandlers [ type ] = gestureHandler ;
227+ }
201228 gestureHandler . on ( GestureHandlerStateEvent , this . onGestureStateChange ( GestureTypes . rotation ) , this ) ;
202229 gestureHandler . on ( GestureHandlerTouchEvent , this . onGestureTouchChange ( GestureTypes . rotation ) , this ) ;
203- gestureHandler . attachToView ( target ) ;
204- target . _gestureObservers [ type ] = gestureHandler ;
205230 }
206231 if ( type & GestureTypes . touch && global . isIOS ) {
207232 // let s not reimplement it for touch
0 commit comments